//1640 This file contains descriptions for all the hack options found in TobEx .ini files Description format: ------------------- /////////////////////////////////////// ----- [hack flags] (compatibility information) Hack description Options: -: Hack flags: [B] - Currently in beta and otherwise unclassified [C] - Compatibility issues present [D] - Extra debugging information [F] - Engine bug fix [M] - Adds extra functionality for modder/player use [O] - Code optimisation [T] - Tweak to engine behaviour (configured in TobEx_ini/TobExTweak.ini) [X] - This hack makes use of alterations to game resources outside the executable that are implemented by TobEx /////////////////////////////////////// ACTION -----820 AddKit Actions Fix [F] Fixes the AddKit() and AddSuperKit() actions to store the entire kit DWORD instead of just the low WORD This allows setting BARBARIAN (0x40000000) and WILDMAGE (0x80000000) kits specifically Options: -0: disabled -1: enabled -----1520 AttackOnce Action Fix [F] Makes the following fixes to the standard attack action: 1. With X/2 attacks, the attack that occurs once every two rounds now always occurs every two rounds (rather than a random probability of the attack taking place every single round) 2. With 3/2 attacks, the attack that occurs once every two rounds now always uses the offhand if an offhand weapon is present (rather than the offhand never being used) Options: -0: disabled -1: enabled -----1530 Attacks Are All Genuine [T, X] The LIGHT_GREEN, YELLOW, BLUE, FUCHSIA, LIGHT_BLUE, LIGHT_GREY and RED pixels only play the melee attack animation if a statistical attack takes place To make all animations attacks statistical attacks, the RNDBASE files need to be modified Options: -0: disabled -1: enabled -----1560 ChangeAnimation Action Fix [F] Corrects an error where state flags are not inherited by the creature replacing the old creature Options: -0: disabled -1: enabled -----770 EquipRanged Action Fix [F] Corrects an error in the EquipRanged() action where an equipped shield would prevent one-handed ranged weapons in the weapon slot to be equipped Options: -0: disabled -1: enabled -----1230 Expanded Actions [M] Enables the use of new actions Descriptions 352 LoseGame() Plays the ending cutscene as if the protagonist died. If the action is used in a pausing dialogue, the ending cutscene will play after the dialogue ends. This action does nothing in the arenas game type. 353 DialogueSetGlobal(S:Name*,S:Area*,I:Value*) Sets the variable 'Name' in the scope 'Area' to 'Value' immediately instead of being added through the dialogue owner's action queue. This allows variables to be set instantaneously and checked immediately afterwards in the same dialogue. ActionOverride() is supported. If used outside dialogue, this action behaves exactly as SetGlobal(). Limitations: Variables become set asynchronously to the order in which the action is present on the script block. This can cause issues when an action is purposely sandwiched between two modifications of the same variable. 354 DialogueIncrementGlobal(S:Name*,S:Area*,I:Value*) Increments the variable 'Name' in the scope 'Area' by 'Value' immediately instead of being added through the dialogue owner's action queue. This allows variables to be set instantaneously and checked immediately afterwards in the same dialogue. ActionOverride() is supported. If used outside dialogue, this action behaves exactly as IncrementGlobal(). Limitations: Variables become set asynchronously to the order in which the action is present on the script block. This can cause issues when an action is purposely sandwiched between two modifications of the same variable. 355 DialogueSG(S:Name*,I:Num*) Sets the global variable 'Name' to 'Num' immediately instead of being added through the dialogue owner's action queue. This allows variables to be set instantaneously and checked immediately afterwards in the same dialogue. ActionOverride() is supported. If used outside dialogue, this action behaves exactly as SG(). Limitations: Variables become set asynchronously to the order in which the action is present on the script block. This can cause issues when an action is purposely sandwiched between two modifications of the same variable. 356 Assign(S:Statement*,I:Type*ArgType,I:Local*) 356 AssignFromObject(S:Statement*,O:Object*,I:Type*ArgType,I:Local*) Assigns a value determined by Statement of the type Type from ARGTYPE.IDS (INT integer, or STR string) to a local action block variable. The general form of Statement is "prefix[params]". If Object is specified, the value of Statement is determined relative to Object instead of the object that owns the script. This action is ignored by prior Eval() actions. The general form of Statement is "prefix[params]" -"prefix" can be: * 'c' - assigns a constant value; params is a number, e.g. c[1], or string, e.g. c[FOO] * 'e' - assigns the value of an expression; params is an expression, e.g. e[6 + 7]; see 0x411B Eval() for the format of Expression * 'id' - assigns the index of a IDS file value; params is file.value, e.g. id[EA.CHARMED] * 's' - assigns the value of the stat specified of the current object; params is the stat name, e.g. s[LEVEL] * 'sp' - assigns a special value specified; params is the special name from ASGNSPEC.IDS, e.g. sp[SPRITE_POS_X] * 'tn' - assigns the value of a 2DA file value by coordinates; params is file.x.y, e.g. tn[IMPORT01.0.0] * 'ts' - assigns the value of a 2DA file value by column and row name; params is file.column.row, e.g. tn[IMPORT01.ITEMS.1] * 'v' - assigns the value of a variable; params is name.scope, e.g. [foo.GLOBAL] -"params" values containing # and @ are replaced by the integer and string values, respectively, stored in local action block variables of index "num". Avoid using integer variables in expressions of string type. Avoid using string variables in expressions of integer type. The range of "num" is 0 to 24. 357 Eval(S:Expression*,I:Type*ArgType,I:Loc*) Overwrites the (Loc)th argument of type Type from ARGTYPE.IDS (INT integer, or STR string) in the next action with the value returned by Expression. To replace point X and point Y, use a Loc value of 4 and 5, respectively. This action skips subsequent Assign() and Eval() actions when determining in which action to overwrite a value. This action does not overwrite values of actions beyond ClearBlockVariables() actions. -Expression is a math expression that can use the following symbols: =+-*/%^() min(x, y), max(x, y), avg(x, y) ceil(x), floor(x), round(x) abs(x) reciprocal(x) sqrt(x), pow(x, y) log(x), log10(x) sin(x), cos(x), tan(x), sinh(x), cosh(x), tanh(x), asin(x), acos(x), atan(x), atan2(x) Custom: and(x, y), or(x, y), band(x, y), bor(x, y) -Any text in Expression of form # and @ is replaced by the integer and string values, respectively, stored in local action block variables of index "num". Avoid using integer variables in expressions of string type. Avoid using string variables in expressions of integer type. The range of "num" is 0 to 24. 358 ClearBlockVariables() Sets all action block integer variables to 0 and empties all actions block string variables. Options: -0: disabled -1: enabled ----1300 JoinParty Action Class Ability Refresh Fix [F] Fixes an exploit whereby the JoinParty() action restores all class abilities, allowing players to re-use class abilities over and over again Options: -0: disabled -1: enabled -----590 Remain Hidden On Pickpocket Success [C, T] (Different implementation to, and overrides tob_hacks) If pickpocketing is successful, the character does not become visible Limitation: Hide In Shadows will still terminate at the end of the round Options: -0: disabled -1: enabled -----1610 TakePartyItem Fix [F] Fixes two issues with non-party characters using TakePartyItem() and TakeItemListParty() actions and their variants: -no longer puts the items in the magical weapon slot -no longer puts the items in the quick item slot -removes a buffer overflow in some cases when putting items into the magical weapon slot or last two inventory slots Options: -0: disabled -1: enabled /////////////////////////////////////// ARENAS -----1100 Enable Arenas Game Type [M] Enables the arena multiplayer game type accessible from the multiplayer menu In the arena game type: -Games are called scenarios and are loaded as saved games from the ./arenas directory -Pausing the game is not allowed -The game does not end when Player1 dies -LOCALSKickedOut is not set on death -Only inventory slot items are dropped on death -The DeathmatchPosition() actions set the DEATHMATCH_RESURRECT variable -When the action DeathmatchPosition() is used, a player who dies will immediately Raise Dead and LeaveAreaLua() to the position set by DeathmatchPosition(), with a random orientation -Gold is not shared by the party but is kept by the player -Opposing players' health is not shown overhead and tooltips reveal approximate health -No locator feedback is displayed when opposing players are damaged -Opposing players' visibility maps are not displayed -Party effects do not affected opposing players, hostile non-party effects affect opposing players -Chunk death is disabled -The default action when clicking on the portrait of an opposing player is to attack when in visibility range, and to move to opposing player when outside visibility range -Record screen information on opposing players is not accessible Limitations: -Multiplayer permissions cannot be set correctly when setting up the game -The host can reform party, kicking out other players -The party can rest, all party members will heal, and the party cannot rest when the party is scattered (including opposing players) -Any player can modify the party position of all party members -Dialogue can be made to pause the game -One can see the opposing player's kit description -When outside visibility range, clicking on an opposing player's portrait allows the player to locate their opponents -Summoned creatures turn enemy when hit by opposing players Options: -0: disabled -1: enabled /////////////////////////////////////// DEBUG -----190 Critical Error Message Box Fix [F] Fixes an issue where the critical error message box during a crash does not always display This is because the window thread that the message box is sent to is suspended Options: -0: disabled -1: enabled -----1550 Expanded LUA Console [D] Greatly expands the in-game LUA console to provide more debugging features Restores the function of CLUAConsole:StartStore(), which originally crashed the game Options: -0: disabled -1: enabled -----390 Externalise Logging [D] Duplicates the game's logging text onto the console and TobEx.log (with timestamp) Requires 'Logging On=1' under baldur.ini [Program Options] Options: -0: disabled -1: enabled -----500 Log Assertion Failures [D] Logs assertion failures in the game to console and TobEx.log (with timestamp) These are logged even when the game is unable to display them Assertions will display a return address to facilitate debugging The following are also changed: -Missing spell icons for spells in the spell selection screen correctly display an assertion failure Does not require "Logging On=1" in baldur.ini Options: -0: disabled -1: enabled -----510 Log Assertion Warnings [D] Logs assertion failures that are ignored by the game to console and TobEx.log (with timestamp) Display of these errors does not mean your game is unstable May be useful for debugging Options: -0: disabled -1: enabled -----520 Log Dialogue Bar [D] Logs everything printed to the dialogue/log bar in-game into TobEx_dlg.log The in-game timestamp is appended in hexadecimal format before each entry Options: -0: disabled -1: enabled -----540 Log File Mode [D] Determines whether log files created by TobEx are overwritten or appended to each TobEx session This applies to both TobEx.log and TobEx_dlg.log Options: -0: overwrites log files each session -1: appends to log files each session -----890 Log Missing Resources [D] Logs when a resource is not found If 'Extenal Logging' is enabled, text is also printed to console and TobEx.log (with timestamp) Requires 'Logging On=1' under baldur.ini [Program Options] Note: if the game attempts to find a string reference out of bounds of dialog.tlk, spurious missing .WAV resources are logged that look like .wav Options: -0: disabled -1: enabled -----530 Log More Messages [D] Logs some messages suppressed by hard code into baldur.log If 'Extenal Logging' is enabled, text is also printed to console and TobEx.log (with timestamp) Requires 'Logging On=1' under baldur.ini [Program Options] Options: -0: disabled -1: enabled -----1080 Log Network Errors [D] Prints some network errors to the console and logs into TobEx.log (with timestamp) Options: -0: disabled -1: enabled -----620 Restore Extra Combat Info Text [C, D] (Different implementation to, and clashes with tob_inject) Restores the option of displaying extra to hit and damage rolls and modifiers in the game console This debug feature was present in Shadows of Amn 23037 but not Throne of Bhaal Requires 'Extra Combat Info=1' under baldur.ini [Game Options] Options: -0: disabled -1: enabled -----710 Verbose Logging [D] Prints to console and logs excessive amounts of internal TobEx debug messages Do not use this unless you are troubleshooting and need to report TobEx debug messages Options: -0: disabled -1: enabled /////////////////////////////////////// EFFECT OPCODES -----850 Apply Concentration Check On Damage [T] Modifies the damage opcode such that spellcasters spells are interrupted if they do not save against a concentration check A spellcaster passes the concentration check if (1D20 + luck) > (spell level + damage taken) Note: This hack is subject to change Options: -0: disabled -1: enabled -----60 Apply Effect Item Fix [F] Restores the function of the apply effect item opcode Description #182 (0x0B6) Item: Apply Effect Item [182] Parameter #1: Undetermined Parameter #2: Undetermined Description: Applies the effect specified by the resource 2 key to the targeted creature(s) when an item specified by the resource key is equipped. Due to the use of the resource 2 key, this effect must be used in an EFF file. Limitations: the effect is applied again if an already equipped matching item is used to force-attack a target via the quickbar. Options: -0: disabled -1: enabled -----70 Apply Effect Itemtype Fix [F] Restores the function of the apply effect item type opcode Description #183 (0x0B7) Item: Apply Effect Itemtype [183] Parameter #1: String Reference Parameter #2: Type Description: Applies the effect specified by the resource key to the targeted creature(s) when an item of the item type specified by the 'Type' field is equipped. The 'String Reference' field is currently unused. Limitations: the effect is applied again if an already equipped matching itemtype is used to force-attack a target via the quickbar. Options: -0: disabled -1: enabled -----80 Attacks Per Round Mod Fix [C, F] (Different implementation to, and overrides tob_hacks) Fixes the attacks per round modifier opcode to integrate the 1-5 and 1.5-4.5 attacks per round Description #1 (0x001) Stat: Attacks Per Round Modifier [1] Parameter #1: Value Parameter #2: Type Description: Alters a characters Attacks per Round in the style specified by 'Type' field. Key Attacks Per Round 0 0 1 1 2 2 3 3 4 4 5 5 6 0.5 7 1.5 8 2.5 9 3.5 10 4.5 Known values for 'Type' are: 0 Cumulative Modifier -> Key = Key + Value [Value is of type 'Key' with support for negative keys] 1 Flat Value Modifier -> Key = Value [Value is of type 'Key'] 2 Percentage Modifier -> Key = Key * value / 100 [Value is of type 'positive integer', with rounding to the nearest 0.5 attacks] NB. Unlike the original engine implementation, stacking this opcode stacks the effect on the number of attacks, not the key. Options: -0: disabled -1: enabled -----90 Awaken Fix [C, F] (Identical to Spell Revisions 'Cure Sleep Fix') Fixes awaken opcode to remove sleep opcode rather than itself Options: -0: disabled -1: enabled -----100 Awaken On Damage [T] Creatures have the equivalent of the awaken opcode applied if the damage opcode is applied i.e. sleeping creatures wake up when hurt Options: -0: disabled -1: enabled -----970 Blindness As Spell Description [C, T] (Different implementation to, and overrides tob_hacks) Overwrites the blindness effect opcode to give -4 to hit and 4 point armor penalty as per spell description in the game If enabled, this hack overrides 110 Blindness Fix Options: -0: disabled -1: enabled -----110 Blindness Fix [C, F] (Different implementation to, and overrides tob_hacks) Removes the cumulative -10 to hit penalty when the blindness effect opcode stacks If 970 Blindness As Spell Description is enabled, this hack is overridden Options: -0: disabled -1: enabled -----1210 Button Effects Mod [M] REQUIRES: Expanded Stats Expands the disable and enable button opcodes to allow disabling/enabling the Bard Song (10) and Find Traps (14) buttons, respectively. The button disabled states are tied to new hard-coded stats 308-322, inclusive. Descriptions #144 (0x090) Button: Disable Button [144] Parameter #1: Irrelevant Parameter #2: Button Description: Disabled the button specified by the 'Button' field. Known values for 'Button' are: 0 Stealth Button 1 Thieving Skill Button 2 Spell Select Button 3 First Quick Spell Button 4 Second Quick Spell Button 5 Third Quick Spell Button 6 Turn Undead Button 7 Talk Button 8 Use Item Button 9 First Quick Item Button 10 Bard Song Button 11 Second Quick Item Button 12 Third Quick Item Button 13 Innate Ability Button 14 Find Traps Button #279 (0x117) Button: Enable Button [279] Parameter #1: Irrelevant Parameter #2: Button Description: Enables the button specified by the 'Button Type' field. Known values for 'Button' are: As above Options: -0: disabled -1: enabled -----210 Cast Spell On Condition Mod [M] Modifies the cast spell on condition effect to allow customisation of how often the condition is checked Note: using too many conditional spells with low values for trigger check period may slow the game down The default trigger check value is 100 Description #232 (0x0E8) Spell Effect: Cast Spell on Condition [232] Parameter #1: Target Parameter #2 Low: Condition Parameter #2 High: Trigger Check Period Description: Casts the spell specified by the resource field on the target specified by the 'Target' field, when the condition from the 'Condition' field is true. The conditions are akin to various triggers. The trigger check period field specifies how often (in ticks) the condition is checked. If set to 0, the trigger check period is 100 ticks (game default). Known values for 'Target' are: 0 Effect Target 1 LastHitter 2 NearestEnemyOf 3 Nearest Known values for 'Condition' are: 0 HitBy() 1 See(NearestEnemyOf()) 2 HPPercentLT(Myself 50) 3 HPPercentLT(Myself 25) 4 HPPercentLT(Myself 10) 5 StateCheck(Myself,STATE_HELPLESS) i.e. unconscious 6 StateCheck(Myself,STATE_POISONED) i.e. poisoned 7 AttackedBy('Target') 8 PersonalSpaceDistance('Target',4) 9 PersonalSpaceDistance('Target',10) 10 Unknown - every round 11 TookDamage() A non-zero Parameter 3 Low value activates the portrait icon, immediately triggers the HitBy() trigger, and prevents purging of the conditional spell after the condition is true. Parameter 3 High is reserved for internal use (specifies that Parameter 4 has been set). Parameter 4 is reserved for internal use (set to the game time when the effect is first applied). Options: -0: disabled -1: enabled -----50 Casting Level Mod Fix [C, F, M] (Identical to tob_hacks) Restores the function of casting level modifier effect opcode by applying CASTINGLEVELBONUSMAGE and CASTINGLEVELBONUSCLERIC bonuses when casting spells Options: -0: disabled -1: enabled -----1310 Charisma Mod Fix [F] Fixes a bug so that a net negative charisma value will limit to 0 rather than wrap to 25 This removes an exploit involving the Rod of Terror and the Ring of Human Influence Options: -0: disabled -1: enabled -----130 Configurable Backstab Every Hit [C, M] (Incompatible with tob_hacks) Modifies the backstab every hit opcode parameter 2 to configure whether STATE_INVISIBLE and position matters in a backstab Description #303 (0x12F) Spell Effect: Backstab On Condition [303] Parameter #1: Irrelevant Parameter #2: Type (bitfield) Description: The targeted creature(s) will backstab on the conditions set by the 'Type' field. Known values for 'Type' are: 0 Normal conditions (attacker must be invisible, attacker must be in 90-degree arc behind victim) 1 Ignore invisible requirement and positioning requirement 2 Ignore invisible requirement only 4 Ignore positioning requirement only Options: -0: disabled -1: enabled -----160 Configurable Damage Effect Bypasses Mirror Images [C, M] (Different implementation to tob_hacks, SCS, SCSII, Spell Revisions) Adds new bit 24 to effect save type field 'Bypass Mirror Images' Only for the damage effect opcode, if this bit is set, the mirror image check is skipped when checking saving throw Options: -0: disabled -1: enabled -----240 Configurable Effect Stacking [M] Adds bit 25 (Limit Effect Stacking) of the EFF V2.0 Header offset 0x0040 (Save Type), ITM V1.0 Feature Block offset 0x0024 (Save Type), and SPL V1.0 Feature Block offset 0x0024 (Save Type). When set, TobEx checks EFF V2.0 Header offset 0x0048 (Special), ITM V1.0 Feature Block offset 0x002C (Special), and SPL V1.0 Feature Block offset 0x002C (Special) for a unique stacking ID. If two effects of the same opcode are applied, both have Limit Effect Stacking Set, and both have the same stacking ID, then the latter applied effect is suspended in application until the former effect expires. Regardless of whether it is applied, the latter effect will expire at the same time that it would expire if it was applied. In other words, the total duration of some non-stacking effect opcode is not extended because more than one copy of the effect was applied. Stacking IDs are unique to the opcode being applied. To maintain uniqueness of stacking IDs between different mods, one recommendation is to use the higher word of Special as the modder's Infinity Engine Community Prefix, then use the lower word as an identifying ID. For example, 0x41360001 ('A6' 0x0001). TobEx also implements bit 26 (Internal: Suspend Effect Application) of the EFF V2.0 Header offset 0x0040 (Save Type), ITM V1.0 Feature Block offset 0x0024 (Save Type), and SPL V1.0 Feature Block offset 0x0024 (Save Type) to prevent effects with limited stacking from being applied. Options: -0: disabled -1: enabled -----170 Configurable Magical Item Dispel Behaviour [C, M] (Different implementation to, and overrides tob_hacks, Spell Revisions) This hack perform two functions: 1. Modification to dispel effect opcode Alows configuration of the dispelling of items in the magical weapon slot (SLOT_MISC19) by adding a high WORD (0xA) Description #58 (0x03A) Cure: Dispellable Effects (Dispel Magic) [58] Parameter #1: Level Parameter #2 Low: Type Parameter #2 High: Magical weapon dispel behaviour Description: Dispels magic from the targeted creature(s). Depending on the value of the 'Type' field, the 'Level' field can be used to set the level of the effect. Known values for 'Type' are: 0 Always dispel 1 Use Caster Level 2 Use 'Level' field Known values for 'Magical weapon dispel behaviour' are: 0 Always dispel 1 Do not dispel 2 Chance of dispel (target level is the higher of the effective mage or cleric level, whichever is higher) With 'Type' of 1 or 2, the base chance of successfully dispelling is 50%. This chance is modified by the relative levels of the dispeller to the target. Each level below target gives a -10% chance, each level above target gives a +5% chance. There is always a 1% chance of success or failure. 2. Adds new bit 24 to the item flags 'Not dispellable in magical weapon slot' Options: -0: disabled -1: enabled -----1320 Constitution Mod Fix [F] Fixes a bug so that a net negative constitution value will limit to 0 rather than wrap to 25 Options: -0: disabled -1: enabled -----1020 Container Use EFF File Fix [F] Fixes memory deallocation bug for use EFF file opcode on containers and doors Options: -0: disabled -1: enabled -----200 Cure Drunk Fix [C, F] (Identical to tob_hacks) Fixes cure drunkenness opcode to remove Drunk opcode rather than itself Options: -0: disabled -1: enabled -----350 Cut Scene 2 Mod [C, M] (Different implementation to, and overrides tob_hacks) Expands the pocketplane opcode to allow for use of custom cutscene scripts and options for storing current party locations Description #298 (0x12A) Cutscene 2 [298] Parameter #1: Store party location behaviour Parameter #2: Script Description: Starts a cutscene. Values for 'Store party location behaviour': 0 Use list specifically for pocket plane 1 Use list normally used by StorePartyLocations() action - restore with RestorePartyLocations() action 2 Do not store party locations Values for 'Use custom script': 0 Use cut250a.bcs 1 Use cutscene script specified by the Resource field Options: -0: disabled -1: enabled -----860 Damage Fix [F] Fixes the following bugs with the damage opcode: 1. Killing someone with magic fire damage would cause a WEIRD damage assertion failure 2. Hitting someone with magic cold damage would not play a hit sound 3. Memory leak when fist damage would make the target unconscious Options: -0: disabled -1: enabled -----450 Dexterity Mod [F, M, X] Fixes a bug so that a net negative dexterity value will limit to 0 rather than wrap to 25 Adds the Icewind Dale Type 3 Cat's Grace Spell to the dexterity modifier effect opcode #15 (0x00F) Stat: Dexterity Modifier [15] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Dexterity = Dexterity + 'Statistic Modifier' value 1 Flat Value Modifier -> Dexterity = 'Statistic Modifier' value 2 Percentage Modifier -> Dexterity = (Dexterity * 'Statistic Modifier' value) / 100 3 Cats Grace Spell For a Type of 3 (Cat's Grace Spell), dexterity is modified as per Icewind Dale Cat's Grace spell behaviour, externalised to CLSSPLAB.2DA, in which 1Dx dexterity is gained up to a maximum of 20 depending on the player's class (defaults to 1D6 if class is not present), where x is specified by the DEX column. Options: -0: disabled -1: enabled -----260 Disable Stoneskin Grey Colour [C, T] (Identical to tob_hacks, SCS, SCSII) Removes grey colour change of character applied the stoneskin opcode Options: -0: disabled -1: enabled -----270 Disease Fix [C, F] (Different implementation to, and clashes with tob_hacks) Fixes a bug with the disease opcode for parameter 2 values of 0-3 where a creature with multiple instances of disease, poison, wing buffet, regeneration and/or repeating effect opcodes would only have the highest frequency instance applied Options: -0: disabled -1: enabled -----280 Disintegrate Fix [F] Fixed a memory leak in the disintegrate effect opcode in the case where the target does not match the effect parameters. An instant death effect would be allocated in memory but not freed. Options: -0: disabled -1: enabled -----290 Dispel Formula Fix [C, F] (Different implementation to, and overrides tob_hacks, SCS, SCSII, Spell Revisions) Corrects the formula used for the dispel opcode Options: -0: disabled -1: enabled -----1050/1060/1070 Drop Inventory On Disintegrate/Frozen Death/Stone Death [C, T] (May clash with components of P5Tweaks, which tries to replicate this behaviour) Alters the instant death opcode to make the creature drop all non-critical items on disintegrate, frozen death, and/or stone death Options: -0: disabled -1: enabled -----1360 Fatigue Mod Fix [F] Fixes a bug so that a net negative fatigue limit value will limit to 0 rather than wrap to 100 Options: -0: disabled -1: enabled -----1440 Find Traps Mod Fix [F] Fixes a bug so that an out of bounds find traps skill will limit to 0 or 255 rather than wrap around Options: -0: disabled -1: enabled -----420 Forbid Item Type Fix [C, F] (Identical to tob_hacks) Fixes an engine bug that caused the forbidden item type information to be placed in an unused list whenever parameter 2 was non-zero Options: -0: disabled -1: enabled -----1330 Intelligence Mod Fix [F] Fixes a bug so that a net negative intelligence value will limit to 0 rather than wrap to 25 Options: -0: disabled -1: enabled -----1370 Intoxication Mod Fix [F] Fixes a bug so that a net negative intoxication value will limit to 0 rather than wrap to 100 Options: -0: disabled -1: enabled -----430 Invisible Fix [F] Corrects the application of improved invisibility when the timing is permanent until death for the invisible opcode Options: -0: disabled -1: enabled -----920 Learn Spell Mod [M] Adds a number of flags to parameter 1 high of the learn spell opcode as described below Description #147 (0x093) Spell: Learn Spell [147] Parameter #1 Low: Irrelevant Parameter #1 High: Flags Parameter #2: Irrelevant Description: The targeted creature(s) tries to learn the spell specified by the resource key. Learning is successful when 1D100 <= the INT-dependent LEARN_SPELL value in INTBON.2DA. The LEARN_SPELL value is modified for mage specialists, with +15 for same school spells, and -15 for non-same school spells. The 'Flags' field modifies the behaviour of the effect in the following manners: Bit 0: Learning the spell never gives experience (including scrolls from the inventory screen) Bit 1: No effect (reserved for GemRB) Bit 2: Learning is always successful (including scrolls from the inventory screen) Bit 3: No effect (reserved for GemRB) Bit 4: If the spell is already learnt, no experience is given (excludes inventory screen) Bit 5: Learning the spell obeys mage school exclusions (excludes inventory screen) Bit 6: The spell cannot be learnt by sorcerer class (excludes inventory screen) Bit 7: Learning fails if the target has already learnt the maximum number of spells as per INTMOD.2DA for the spell's level (excludes inventory screen) Options: -0: disabled -1: enabled -----1380 Level Mod Fix [F] Fixes a bug so that a net negative level will limit to 0 rather than wrap to 100 Options: -0: disabled -1: enabled -----1340 Lore Mod Fix [F] Fixes a bug so that a net negative lore value will limit to 0 rather than wrap to 100 Options: -0: disabled -1: enabled -----1120 Luck Mod [M] Adds instantaneous sum type (3) Description #22 (0x016) Stat: Cumulative Luck Bonus [22] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Luck = Luck + 'Statistic Modifier' value 1 Flat Value Modifier -> Luck = 'Statistic Modifier' value 2 Percentage Modifier -> Luck = (Luck * 'Statistic Modifier' value) / 100 3 Instantaneous Cumulative Modifier -> Luck = Luck + 'Statistic Modifier' value For a non-permanent timing, the instantaneous cumulative modifier immediately adds the 'Statistic Modifier' value, unlike the cumulative modifier which adds the 'Statistic Modifier' after all effects are applied. The former has the disadvantage that it will be overriden by any subsequent flat value modifiers. Percentage modifiers override all other modifiers. -----460 Mage Spell Slots Mod [M] Adds the Icewind Dale Type 512 Double Spells to the mage spell slots modifier effect opcode See the IWD:TotL description for this opcode in the IESDP for more information. Options: -0: disabled -1: enabled -----550 Magic Resistance Mod Fix [F, M] Fixes the magic resistance modifier opcode to allow for permanent timing Adds percentage modifier type (2) Description #166 (0x0A6) Stat: Magical Resistance Modifier [166] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Instantaneous Cumulative Modifier -> Value = Value + 'Statistic Modifier' value 1 Flat Value Modifier -> Value = 'Statistic Modifier' value 2 Percentage Modifier -> Value = (Value * 'Statistic Modifier' value) / 100 3 Cumulative Modifier -> Value = Value + 'Statistic Modifier' value For a non-permanent timing, the instantaneous cumulative modifier immediately adds the 'Statistic Modifier' value, unlike the cumulative modifier which adds the 'Statistic Modifier' after all effects are applied. The former has the disadvantage that it will be overriden by any subsequent flat value modifiers. Percentage modifiers override all other modifiers. Options: -0: disabled -1: enabled -----1410 Morale Break Mod Fix [F] Fixes a bug so that an out of bounds morale break value will limit to 0 or 255 rather than wrap around Options: -0: disabled -1: enabled -----870 No Spell Interruption On Zero Damage [T] Modifies the damage opcode such that if damage is reduced to zero (with normal damage behaviour; wParam2Low = 0), spellcasting and casting animations are not interrupted Options: -0: disabled -1: enabled -----1450 Open Locks Mod Fix [F] Fixes a bug so that an out of bounds open locks skill will limit to 0 or 255 rather than wrap around Options: -0: disabled -1: enabled -----1430 Pick Pockets Mod Fix [F] Fixes a bug so that an out of bounds pick pockets skill will limit to 0 or 255 rather than wrap around Options: -0: disabled -1: enabled -----570 Poison Fix [C, F] (Different implementation to, and clashes with tob_hacks) Fixes a bug with the poison opcode where a creature with multiple instances of disease, poison, wing buffet, regeneration and/or repeating effect opcodes would only have the highest frequency instance applied Options: -0: disabled -1: enabled -----1630 Poison Resistance Mod [M] Adds sum (1), percentage modifier (2), and instantaneous sum (3) types Description #173 (0x0AD) Stat: Set Poison Resistance [173] Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Flat Value Modifier -> Value = 'Statistic Modifier' value 1 Cumulative Modifier -> Value = Value + 'Statistic Modifier' value 2 Percentage Modifier -> Value = (Value * 'Statistic Modifier' value) / 100 3 Instantaneous Cumulative Modifier -> Value = Value + 'Statistic Modifier' value Note that the 'Percentage Modifier' type (2) is applied before the 'Cumulative Modifier' types (1) are applied. Options: -0: disabled -1: enabled -----1510 Polymorph Fix [F] Fixes a bug with param2=1 (Appearance only) where changes to the character's colour would either not work, or revert back to normal colours on refreshing the character Options: -0: disabled -1: enabled -----470 Priest Spell Slots Mod [M] Adds the Icewind Dale Type 512 Double Spells to the priest spell slots modifier effect opcode See the IWD:TotL description for this opcode in the IESDP for more information. Options: -0: disabled -1: enabled -----1030 Proficiency Modifier Mod [M] Extends the proficiency modifier opcode to allow incrementation/decrementation of proficiencies Standard Throne of Bhaal proficiencies are limited to a maximum of 5 stars Description #233 (0x0E9) Stat: Proficiency Modifier [233] Parameter #1: Amount Parameter #2 Low: Type Parameter #2 High: Behaviour Description: Applies 'Behaviour' to the weapon proficiency points for the weapon type specified in the 'Type' field with the value specified by the 'Amount' field, for the targeted creature(s). Values for 'Behaviour' are: 0 Set proficiency 'Type' to 'Amount' only if 'Amount' is higher than the current proficiency points 1 Proficiency points of 'Type' = Proficiency points of 'Type' + 'Amount' (applied after all of Behaviour 0) Values for 'Type' are: See STATS.IDS for proficiency values Options: -0: disabled -1: enabled -----580 Regeneration Fix [C, F] (Different implementation to, and clashes with tob_hacks) Fixes a bug with the regeneration opcode where a creature with multiple instances of disease, poison, wing buffet, regeneration and/or repeating effect opcodes would only have the highest frequency instance applied Options: -0: disabled -1: enabled -----600 Remove Projectile Mod [M] Enabled the use of the remove specific area effect to allow custom 2DAs to be used in the Resource field. Description #273 (0x111) Remove: Specific Area Effect(Zone of Sweet Air) [273] Parameter #1: Mode Parameter #2: Undetermined Description: If Mode is not 1, removes projectiles listed in clearair.2da and smoke of animation ID 0x5*0 (standard behaviour). If Mode is 1, removes projectiles and smoke animations listed in the 2da resource specified in the Resource field. If the custom resource is invalid, standard behaviour occurs as if Mode is 0. The recommended format of the custom 2da resources are as follows: 2DA V1.00 * Projectile Number Smoke Animation 94 * //for projectile only * 0X0500 //for smoke animation only 186 0X0600 //for projectile and smoke animation Note that the smoke animation ID must be specified in hexadecimal, with capital X and must be 4 hexadecimal digits. The third digit of the target smoke animation ID is ignored, e.g. 0X0500 will remove smoke animation IDs 0x05*0. Options: -0: disabled -1: enabled -----610 Repeating Effect Fix [c, F] (Different implementation to, and clashes with tob_hacks) Fixes a bug with the repeating effect opcode where a creature with multiple instances of disease, poison, wing buffet, regeneration and/or repeating effect opcodes would only have the highest frequency instance applied Options: -0: disabled -1: enabled -----1400 Reputation Mod Fix [F] Fixes a bug so that an out of bounds reputation value will limit to 0 or 255 rather than wrap around Options: -0: disabled -1: enabled -----1130 Save Vs Breath Mod [F, M] Fixes a bug so that the save value correctly limits to -20 or 20, rather than a net negative save value wrapping to 20 Adds instantaneous sum type (3) Description #36 (0x024) Stat: Save vs. Breath Weapons Modifier [36] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 1 Flat Value Modifier -> Save = 'Statistic Modifier' value 2 Percentage Modifier -> Save = (Save * 'Statistic Modifier' value) / 100 3 Instantaneous Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 'Statistic Modifier' can be positive or negative. For a non-permanent timing, the instantaneous cumulative modifier immediately adds the 'Statistic Modifier' value, unlike the cumulative modifier which adds the 'Statistic Modifier' after all effects are applied. The former has the disadvantage that it will be overriden by any subsequent flat value modifiers. Percentage modifiers override all other modifiers. -----1140 Save Vs Death Mod [F, M] Fixes a bug so that the save value correctly limits to -20 or 20, rather than a net negative save value wrapping to 20 Adds instantaneous sum type (3) Description #33 (0x021) Stat: Save vs. Death Modifier [33] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 1 Flat Value Modifier -> Save = 'Statistic Modifier' value 2 Percentage Modifier -> Save = (Save * 'Statistic Modifier' value) / 100 3 Instantaneous Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 'Statistic Modifier' can be positive or negative. For a non-permanent timing, the instantaneous cumulative modifier immediately adds the 'Statistic Modifier' value, unlike the cumulative modifier which adds the 'Statistic Modifier' after all effects are applied. The former has the disadvantage that it will be overriden by any subsequent flat value modifiers. Percentage modifiers override all other modifiers. -----1150 Save Vs Poly Mod [F, M] Fixes a bug so that the save value correctly limits to -20 or 20, rather than a net negative save value wrapping to 20 Adds instantaneous sum type (3) Description #35 (0x023) Stat: Save vs. Petrification/Polymorph Modifier [35] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 1 Flat Value Modifier -> Save = 'Statistic Modifier' value 2 Percentage Modifier -> Save = (Save * 'Statistic Modifier' value) / 100 3 Instantaneous Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 'Statistic Modifier' can be positive or negative. For a non-permanent timing, the instantaneous cumulative modifier immediately adds the 'Statistic Modifier' value, unlike the cumulative modifier which adds the 'Statistic Modifier' after all effects are applied. The former has the disadvantage that it will be overriden by any subsequent flat value modifiers. Percentage modifiers override all other modifiers. -----1160 Save Vs Spells Mod [F, M] Fixes a bug so that the save value correctly limits to -20 or 20, rather than a net negative save value wrapping to 20 Adds instantaneous sum type (3) Description #37 (0x025) Stat: Save vs. Spells Modifier [37] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 1 Flat Value Modifier -> Save = 'Statistic Modifier' value 2 Percentage Modifier -> Save = (Save * 'Statistic Modifier' value) / 100 3 Instantaneous Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 'Statistic Modifier' can be positive or negative. For a non-permanent timing, the instantaneous cumulative modifier immediately adds the 'Statistic Modifier' value, unlike the cumulative modifier which adds the 'Statistic Modifier' after all effects are applied. The former has the disadvantage that it will be overriden by any subsequent flat value modifiers. Percentage modifiers override all other modifiers. -----1170 Save Vs Wands Mod [F, M] Fixes a bug so that the save value correctly limits to -20 or 20, rather than a net negative save value wrapping to 20 Adds instantaneous sum type (3) Description #34 (0x022) Stat: Save vs. Wands Modifier [34] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 1 Flat Value Modifier -> Save = 'Statistic Modifier' value 2 Percentage Modifier -> Save = (Save * 'Statistic Modifier' value) / 100 3 Instantaneous Cumulative Modifier -> Save = Save + 'Statistic Modifier' value 'Statistic Modifier' can be positive or negative. For a non-permanent timing, the instantaneous cumulative modifier immediately adds the 'Statistic Modifier' value, unlike the cumulative modifier which adds the 'Statistic Modifier' after all effects are applied. The former has the disadvantage that it will be overriden by any subsequent flat value modifiers. Percentage modifiers override all other modifiers. -----1570 Saving Throw Fix [F] Fixes three issues with effect saving throws: 1. For multiple saving throw types, TobEx fixes an internal inconsistency when flagging which saving throw type is used to check save. TobEx determines which is the best saving throw type, then checks and flags only that one 2. TobEx fixes an issue where if a saving throw fails by type, but modifiers result in a successful save, a successful save is not reported in the dialogue bar 3. TobEx fixes an issue where targets with improved invisibility did not get a +4 saving throw against effects from creatures that cannot see invisible Options: -0: disabled -1: enabled -----1460 Stealth Mod Fix [F] Fixes a bug so that an out of bounds move silently skill will limit to 0 or 255 rather than wrap around Options: -0: disabled -1: enabled -----1390 Strength Extra Mod Fix [F] Fixes a bug so that a net negative strength extra value will limit to 0 rather than wrap to 100 Options: -0: disabled -1: enabled -----480 Strength Mod [F, M, X] Fixes a bug so that a net negative strength value will limit to 0 rather than wrap to 25 Alters the strength modifier effect opcode to work similar to Icewind Dale behaviour Description #44 (0x02C) Stat: Strength Modifier [44] Parameter #1: Statistic Modifier Parameter #2: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field. Known values for 'Type' are: 0 Cumulative Modifier -> Strength = Strength + 'Statistic Modifier' value 1 Flat Value Modifier -> Strength = 'Statistic Modifier' value 2 Percentage Modifier -> Strength = (Strength * 'Statistic Modifier' value) / 100 3 Strength Spell For a Type of 3 (Strength Spell), strength is modified as per Icewind Dale Strength spell behaviour, externalised to CLSSPLAB.2DA, in which 1Dx strength is gained up to a maximum of 18/ depending on the player's class (defaults to 1D6 if class is not present), where x is specified by the STR column. Unit increments between 18 and 19 depend on differences detected in the STRMODEX.2DA table. The 'Statistic Modifier' value overrides the CLSSPLAB.2DA entry, specifying the die size and allowing a maximum strength of 18/00. FlameWing's description of Strength Spell: "IWD1/P&P Strength Spell With a slight change, in that param1 != 0 means dice size to roll for all classes and allows exceptional strength bonuses for non-warrior classes. For example, param1 = 4 rolls a d4 for strength increase, similar to P&P Strength of Stone spell. In all cases, strength cannot become 19 or more." Options: -0: disabled -1: enabled -----700 Use Caster Level On Mirror Image [C, M, T] (Identical to tob_hacks, SCS, SCSII, Spell Revisions) Modifies the mirror image opcode to keeps caster level so dispel formulae will work on it Options: -0: disabled -1: enabled -----1420 Tracking Mod Fix [F] Fixes a bug so that an out of bounds tracking skill will limit to 0 or 255 rather than wrap around Options: -0: disabled -1: enabled -----1500 Use EFF File Fix [F] Fixes a bug where child EFF file opcode implementations that store information in internal structures are not saved correctly For example: -this fixes a stutter issues associated with the Polymorph opcode when param2=1 -this is required for Poison Fix, Disease Fix, Regeneration Fix, Repeating EFF Fix, Dexterity Mod, and Strength Mod hacks to work correctly Options: -0: disabled -1: enabled -----1350 Wisdom Mod Fix [F] Fixes a bug so that a net negative wisdom value will limit to 0 rather than wrap to 25 Options: -0: disabled -1: enabled /////////////////////////////////////// ENGINE -----20 Allow 99 Priest Known Spells Per Level [M] Expands the 50-spell cap per level of priest spells to 99, but is still limited by SPELLS.2DA Modding Note If this hack is used, the following change should be made to SPELLS.2DA to avoid existing Throne of Bhaal priest spells that should not be included: PRIEST 99 99 99 99 98 97 99 Options: -0: disabled -1: enabled -----1220 Allow All Races to Dual Class [T] Allows all races to dual class, rather than just humans Options: -0: disabled -1: enabled -----560 Allow Equipping Armor in Combat [T] Allows the equipment in the armor slot to be changed during combat. Options: -0: disabled -1: enabled -----940 Allow Zero Starting Experience [M] Prevents character generation issues when starting experience is set to zero Options: -0: disabled -1: enabled -----810 Assassin and Bounty Hunter Penalty to Similar Kits [C, M] (No compatibility issues currently described, but may cause undesirable effects to kit modifications that add kits that combine the 0x40000 and/or 0x80000 unusability flags with other unusability flags) Applies the 15% (Assassin) or 20% (Bounty Hunter) thieving skill points disadvantage to thief kits that combine the use of the 0x40000 and/or 0x80000 unusability flags, respectively, with other unusability flags Options: -0: disabled -1: enabled -----830 Cleric-Ranger HLA Fix [F] Fixed a bug where cleric-ranger multi-class characters had the cleric and ranger HLA rules swapped around This was due to the arrays being set up inconsistently when working out the number of HLAs available at level-up Therefore, cleric-rangers correctly get their first HLA at Ranger level 13 (with cleric HLAs available due to level 7 spells being available), get one HLA for each Ranger level from level 13 and higher, and get one HLA for each Cleric level from level 15 and higher [INCORRECT] -60 nLevelRangerOld -5f nLevelClericOld -5c nLevelRangerNew -5b nLevelClericNew -58 sRanger -54 sCleric [CORRECT] -4c nChangeLevelCleric -4b nChangeLevelRanger -44 nFirstLevelCleric -43 nFirstLevelRanger -38 fNewRateCleric -34 fNewRateRanger -28 fRateCleric -24 fRateRanger Options: -0: disabled -1: enabled -----1580 Clone Creature Fix [F] Fixed a bug where a character who transitions between areas can cause a hostile creature chasing them through the area transition to clone Options: -0: disabled -1: enabled -----950 Custom Shadows of Amn Starting Experience [C, T] (overrides any mods that directly modify the starting experience in the executable, including Baldur's Gate Trilogy-WeiDU) Allows setting a custom amount of starting experience for Shadows of Amn Options: -(-1): disabled -Other value: Shadows of Amn starting experience set to this value -----960 Custom Throne of Bhaal Starting Experience [C, T] (overrides any mods that directly modify the starting experience in the executable) Allows setting a custom amount of starting experience for Throne of Bhaal Options: -(-1): disabled -Other value: Throne of Bhaal starting experience set to this value -----1110 Disable End On Player1 Dead [T] Disables the ending cutscene when the protagonist dies Options: -0: disabled -1: enabled -----760 Disable Force Inventory Pause [T] In single player, entering the inventory screen with the game unpaused does not pause the game If the game is first paused and the user enters the inventory screen, the game will still pause Limitations: similar to the area map, if the user enters the inventory screen with the game unpaused, and then changes to a different screen (e.g. menu, mage book, priest book, journal), the game will remain unpaused Options: -0: disabled -1: enabled -----930 Disable Experience Boost [T] Disables the hard-coded feature where the party gains 110% of the experience actually coded in creatures Also, fixes a bug where the game incorrectly reports the amount of experience gained by the party Options: -0: disabled -1: enabled -----250 Disable Silence On Charm [T] Allows dialogue with charmed/dominated creatures Charmed/dominated creatures also keep their soundsets Options: -0: disabled -1: enabled -----1480 Enable Auto-Pause On All Screens [T] In single player, auto-pause will work on any screen, not just the game screen Used by itself, this tweak will generally have effect on the map screen, because all other screens pause the game automatically Changing to a different screen from the map screen with the game unpaused keeps the game unpaused, so auto-pause will also work in these situations When combined with the Disable Force Inventory Pause hack, this tweak will also have effect in the inventory screen Options: -0: disabled -1: enabled -----730 Expanded Stats [M] Allows modders to extend STATS.IDS to use opcodes 202-SHRT_MAX (32767) Features of new stats: -New stats can be set using effect opcode 318 (0x13E) with description below -New stats 202-400 are reserved for hard-coded stats -New stats can be checked correctly using CheckStat(), CheckStatLT(), and CheckStatGT() script triggers -New stats are not permanent, they require an ongoing effect opcode 318 in order to keep their values -In order to make a new stat semi-permanent, you can set an extremely long duration for the effect, or use timing mode 10 and set duration to INT_MAX (2147483647) -New stats will only be saved in saved games if stored as an effect opcode 318 -Actions cannot directly set the value of new stats (they will not keep); use an action to trigger effect opcode 318 if actions are required -New stats have no effect on the game unless you specifically script in; for example, use scripts to CheckStat() and apply appropriate actions Description #318 (0x13E) Stat: Set stat [318] Parameter #1: Statistic Modifier Parameter #2 low: Stat Opcode Parameter #2 high: Type Description: Applies the modifier value specified by the 'Statistic Modifier' field in the style specified by the 'Type' field to the opcode specified by the 'Stat Opcode' field. Known values for 'Type' are: 0 Cumulative Modifier -> Value = Value + 'Statistic Modifier' value 1 Flat Value Modifier -> Value = 'Statistic Modifier' value 2 Percentage Modifier -> Value = (Value * 'Statistic Modifier' value) / 100 3 Multiplicative Modifier -> Value = Value * 'Statistic Modifier' value 4 Divisive Modifier -> Value = Value / 'Statistic Modifier' value 5 Modulus Modifier -> Value = Value % 'Statistic Modifier' value 6 Logical AND Modifier -> Value = Value && 'Statistic Modifier' value 7 Logical OR Modifier -> Value = Value || 'Statistic Modifier' value 8 Bitwise AND Modifier -> Value = Value & 'Statistic Modifier' value 9 Bitwise OR Modifier -> Value = Value | 'Statistic Modifier' value 10 Inverse Modifier -> Value = !Value Note: You cannot set any stats with opcode < 387 with this effect. New stats 202-400 are reserved for new hard-coded stats. New hard-coded stats 301 FIGHTERLEVEL - true fighter level (does not include monk) 302 MAGELEVEL - true mage level (does not include sorcerer) 303 CLERICLEVEL - true cleric level 304 THIEFLEVEL - true thief level 305 DRUIDLEVEL - true druid level 306 RANGERLEVEL - true ranger level 307 EFFECTCLERICLEVEL - equivalent cleric casting level (Cleric 1 = Ranger 8 = Paladin 9; Cleric-Rangers use cleric level) 308 BUTTONDISABLESTEALTH - set to 1 on Disable Button effect (requires Button Effects Mod) 309 BUTTONDISABLETHIEVING - set to 1 on Disable Button effect (requires Button Effects Mod) 310 BUTTONDISABLECASTSPELL - set to 1 on Disable Button effect (requires Button Effects Mod) 311 BUTTONDISABLEQUICKSPELL1 - set to 1 on Disable Button effect (requires Button Effects Mod) 312 BUTTONDISABLEQUICKSPELL2 - set to 1 on Disable Button effect (requires Button Effects Mod) 313 BUTTONDISABLEQUICKSPELL3 - set to 1 on Disable Button effect (requires Button Effects Mod) 314 BUTTONDISABLETURNUNDEAD - set to 1 on Disable Button effect (requires Button Effects Mod) 315 BUTTONDISABLETALK - set to 1 on Disable Button effect (requires Button Effects Mod) 316 BUTTONDISABLEUSEITEM - set to 1 on Disable Button effect (requires Button Effects Mod) 317 BUTTONDISABLEQUICKITEM1 - set to 1 on Disable Button effect (requires Button Effects Mod) 318 BUTTONDISABLEBARDSONG - set to 1 on Disable Button effect (requires Button Effects Mod) 319 BUTTONDISABLEQUICKITEM2 - set to 1 on Disable Button effect (requires Button Effects Mod) 320 BUTTONDISABLEQUICKITEM3 - set to 1 on Disable Button effect (requires Button Effects Mod) 321 BUTTONDISABLEABILITY - set to 1 on Disable Button effect (requires Button Effects Mod) 322 BUTTONDISABLEFINDTRAPS - disables Find Traps button when set to 1 (requires Button Effects Mod) 323 AID - set to param1 of Aid effect 324 BLESS - set to param1 of Bless effect 325 CHANT - set to param1 of Chant effect 326 DRAWUPONHOLYMIGHT - set to param1 of Draw Upon Holy Might effect 327 CHANTBAD - set to param1 of Chant Bad effect 328 DISABLESPELLTYPEWIZARD - set to 1 on Disable Spelltype effect 329 DISABLESPELLTYPEPRIEST - set to 1 on Disable Spelltype effect 330 DISABLESPELLTYPEINNATE - set to 1 on Disable Spelltype effect 331 WINGBUFFET - set to param2 of Wing Buffet effect 387 ACIDDAMAGEBONUS - percentage modifier to acid damage from item/spell ability effects 388 COLDDAMAGEBONUS - percentage modifier to cold damage from item/spell ability effects 389 CRUSHINGDAMAGEBONUS - percentage modifier to crushing damage from normal damage and item/spell ability effects 390 ELECTRICITYDAMAGEBONUS - percentage modifier to electricity damage from item/spell ability effects 391 FIREDAMAGEBONUS - percentage modifier to fire damage from item/spell ability effects 392 PIERCINGDAMAGEBONUS - percentage modifier to piercing damage from normal damage and item/spell ability effects 393 POISONDAMAGEBONUS - percentage modifier to poison damage from item/spell ability effects 394 MAGICDAMAGEBONUS - percentage modifier to magic damage from item/spell ability effects 395 MISSILEDAMAGEBONUS - percentage modifier to missile damage from normal damage and item/spell ability effects 396 SLASHINGDAMAGEBONUS - percentage modifier to slashing damage from normal damage and item/spell ability effects 397 MAGICFIREDAMAGEBONUS - percentage modifier to magic fire damage from item/spell ability effects 398 MAGICCOLDDAMAGEBONUS - percentage modifier to magic colddamage from item/spell ability effects 399 STUNNINGDAMAGEBONUS - percentage modifier to stunning damage from normal damage and item/spell ability effects 400 WEIGHTALLOWANCEMOD - custom stat that modiifies by sum the amount a character is allowed to carry (total weight allowance = StrMod value + StrModEx value + WeightAllowanceMod) Options: -0: disabled -1: enabled -----840 Externalise HP Tables [M] Externalises two things: 1. Externalises the barbarian HP table to HPBARB.2DA 2. Externalises which HP table to use by subclass to HPCLASS.2DA HPCLASS.2DA should ONLY contain single classes Options: -0: disabled -1: enabled -----380 Externalise Class-Race Restrictions [M, X] The class restrictions of races are externalised to CLSRCREQ.2DA (0: not allowed, 1: allowed) The mage school restrictions of races are externalised to MGSRCREQ.2DA (0: not allowed, 1: allowed) If you enable all classes and mage schools, this effectively allows you to use any class-race combination Note: there are no pre-existing animations for halfling mages and non-human monks Therefore, animation IDs for the former are set to the halfling cleric and the latter to fighter of the same race Options: -0: disabled -1: enabled -----1620 Externalise Difficulty Settings [M, X] Externalises the difficulty-based damage percentage modifier to DIFFMOD.2DA DIFFMOD.2DA Description DAMAGE_MOD: The percentage to add to base damage LUCK_MOD: The amount to add to luck of party members [ROWNAME]: Difficulty level based on DIFFLEV.IDS Options: -0: disabled -1: enabled -----790 Externalise Encumbrance Restrictions [M, X] Externalises the thresholds for low and high encumbrance to ENCUMBER.2DA ENCUMBER.2DA Description THRESHOLD: The percentage weight above which [ROWNAME] applies. If the THRESHOLD is set to 0, [ROWNAME] never applies. If the THRESHOLD is set to a negative number, the value is treated as invalid and the default hard-coded value is applied. [ROWNAME]: Either LOW_ENCUMBRANCE (slowed) or HIGH_ENCUMBRANCE (cannot move) Options: -0: disabled -1: enabled -----1180 Externalise Mage Spells Cap [M] Externalises the number of spells cap per level of mage spells to SPELLS.2DA The cap for level 1-8 spells can be set to 99 The cap for level 9 spells can be set to 199, for which spells 100-199 refer to SPWI0**.SPL Modding Note If this hack is used, it is recommended you use this hack with Externalize Mage Spell Hiding Otherwise, unwanted spells will show up on spell selection screens Also, assuming you provide maximum values for the number of spells in SPELLS.2DA, you should add to HIDESPL.2DA the following vanilla Throne of Bhaal spells: SPWI298-299 SPWI399 SPWI483-491, 493-499 SPWI590-97 SPWI853, 888, 897-899 SPWI926-965, 979-999 SPWI001-027, 050-056 Options: -0: disabled -1: enabled -----1290 Externalise Stealable Item Slots [M] Externalises and expands the configuration of which item slots are amenable to pickpocketing to SLTSTEAL.2DA SLTSTEAL.2DA Description SKILL: The minimum pickpocketing skill with which the item in the item slot can be stolen. If the skill is set to 0, the item slot can never be stolen from. Note that the SLOT_FIST value is ignored. [ROWNAME]: The name of the item slot. The row numbers are mapped to the item slot, not the name, except for SLOT_EQUIPPED. SLOT_EQUIPPED refers to the currently equipped weapon slot, or the currently equipped ammo slot and its launcher slot. Options: -0: disabled -1: enabled -----1280 Fake Talk Exploit Fix [F] Fixes an exploit where players could intend to initiate dialogue with a neutral creature, cancel their action, and then perform a hostile action instead, resulting in the creature wasting up to 10 seconds doing nothing before becoming hostile Options: -0: disabled -1: enabled -----1590 Launcher Proficiency Fix [F] Fixes a bug where no penalties were applied for having no proficiency in launcher weapons (bows, crossbows, slings) Options: -0: disabled -1: enabled -----490 Level One Proficiency Restrictions [C, M, T] (Different implentation to, and clashes with tob_hacks) Enables proficiency restrictions at level one as described by the FIRST_LEVEL column of PROFSMAX.2DA This applies to both character generation and dual classing Options: -0: disabled -1: enabled -----1250 Move Areas Fix [F] This hack tries to fix a bug where a creature that is moving between areas may have multiple requests to do so and thus creates multiple copies of the creature in the area and thus the saved game Courtesy of the Throne of Bhaal 26499 beta patch Options: -0: disabled -1: enabled ----1540 Optimise Variables Code [F] Improves and find and add code for variables Options: -0: disabled -1: enabled -----780 Rest Spawns Advance Time [T] If resting is interrupted by rest spawns, a random amount of time up to eight hours (minus one tick) will pass This feature already existed in the code, but was never utilised Options: -0: disabled -1: enabled ----1260 Spell Turning Fix [F] Fixes a bug where some memory that is not zeroed causes spells to be absorbed instead of bounced Options: -0: disabled -1: enabled -----1240 Summon Limit Fix [F] This hack fixes a bug where the summon count can increment permanently, preventing any further summoning Courtesy of the Throne of Bhaal 26499 beta patch Options: -0: disabled -1: enabled -----900 Targetting Dead Animations Fix [F] Fixes a broad bug where the dead creatures that are not transferred to the middle vertical list can be targetted by AI, triggers and actions Brief Explanation Vertical lists are implemented by areas to determine drawing order There are three vertical lists: LIST_FRONT, LIST_MIDDLE, LIST_BACK AI targetting generally includes only active creatures in LIST_FRONT When most creatures die, they are transferred from LIST_FRONT to LIST_MIDDLE However, some creature animations are coded to disallow use of LIST_MIDDLE; when they die, they stay in LIST_FRONT AI targetting does not account for this, and so dead creatures in LIST_FRONT can still be targetted by AI, triggers and actions (e.g. AttackReevaluate) Animations affected by this are: 0x6404 SAREVOK, 0x4XXX STATIC_* (SLEEPING_* are excluded based on STATE_SLEEPING) This hack correct this issue by preventing dead creatures in LIST_FRONT and are disallowed use of LIST_MIDDLE from being targetted Options: -0: disabled -1: enabled -----990 Weapon Specialisation Number of Attacks Mod [C, T] (identical to tb#tweaks) Modifies the application of weapon specialisation-associated number of attacks bonuses described by WSPATCK.2DA Specifically, all non-monk classes receive such a bonus based on their average level Originally, ranger, paladin, and fighter classes received such a bonus based on their fighter level, while other non-monk classes received no bonus Calculation of such a bonus for the monk class is unchanged Options: -0: disabled -1: enabled /////////////////////////////////////// ITEMS -----1200 Ability-specific Use Item Animations [M] Allows the use of different custom animation sequences for different abilities of the same item This is reflected by the support of extra columns in ITEMANIM.2DA ITEMANIM.2DA Description This file lists the character animation sequence to be played when an item ability is used. This only applies to items that are used in UseItem() and UseItemPoint() actions, or equivalent thereof (i.e. used as quick item). [ROWNAME]: Item ResRef SEQUENCE: The animation sequence to play for the first ability of the specified item (from seq.ids). If there are no other columns, this is the animation sequence to play for all abilities. : The animation sequence to play for the (n+1)th ability of the specified item (from seq.ids), where n is the name of the column. Example WAND05.ITM has two abilities 2DA V1.0 -1 SEQUENCE 1 WAND05 -1 12 Using the first ability plays no animation sequence (-1). Using the second ability plays animation sequence 12 (SEQ_ATTACK_BACKSLASH). Options: -0: disabled -1: enabled -----140 Configurable Backstab Restrictions [C, M] (Different implementation to, and clashes with tob_hacks) Adds new item ability flag bit 25 'Toggle backstab restrictions' When bit 25 is not set, only non-ranged items usable by thieves can be used for backstabbing When bit 25 is set, items normally usable for backstabbing are unusable for backstabbing, and vice versa For a ranged attack that hits, both launcher and ammo abilities are checked for bit 25 and backstabbing toggled if at least one of the two has bit 25 set Examples: Usable by thief Ranged Bit 25 Off Bit 25 On Dagger Yes No Backstab No backstab Warhammer No No No backstab Backstab Arrow Yes Yes No backstab Backstab (bit 25 can be set either on Arrow or Bow) Throwing Axe No Yes No backstab Backstab Options: -0: disabled -1: enabled -----150 Configurable Critical Hit Aversion [M] Adds new item flag bit 25 'Toggle critical hit aversion' If an item with bit 25 set is equipped, critical hit aversion is enabled if the item is equipped in a non-helmet slot If an item with bit 25 set is equipped, critical hit aversion is disabled if the item is equipped in a helmet slot Modding Note Whenever a critical hit is averted by helmet or not with this hack, string reference 20696 will display, reading 'Critical Hit Averted By Helmet'. Mods using this hack should change the string reference to read 'Critical Hit Averted' Options: -0: disabled -1: enabled -----1040 Configurable Items Cannot Target Invisible [M] Adds new item ability flag bit 26 'Cannot target invisible' This includes all creatures with invisibility and/or sanctuary Modding Note If this hack is enabled and a player attempts to use an item ability on an invisible/sanctuary creature with bit 26 set, string reference 46529 will display. It reads 'Spell Cancelled: Can not target spells on invisible or sanctuaried creatures.' This is not consistent with this hack. Mods using this hack should change the string reference to read 'Action Cancelled: Can not target action on invisible or sanctuaried creatures.' This substitutes the words 'Spell[s]' with 'Action' and allows compatibility with the 'Configurable Spells Can Target Invisible' hack. Options: -0: disabled -1: enabled -----300 Enable 99 Random Treasure Rows [M] Enables the use of 99 rows for all RND*.2DA files for modders Options: -0: disabled -1: enabled -----740 Externalise Item-Creature Exclusions [M, X] Externalises creature-specific item restrictions to ITEM_USE.2DA. ITEM_USE.2DA Description [ROWNAME]: the resource name of the item that the item-creature restrictions apply to USER: death variable/script name of creature (not case-sensitive) STRREF#: the string reference to display in the inventory screen when the restriction indicated by the flag value of # applies FLAG: bitfield indicating the type/s of restriction to apply FLAG bits bit 0 [1]: the item cannot be picked up from any slot of the creature (this overrides bits 3 and 4) bit 1 [2]: the item can only be equipped by the creature (this is 'stackable', so multiple item entries with different creatures mean that each of the listed creatures can equip the item) bit 2 [4]: no restrictions (this bit is reserved for GemRB) bit 3 [8]: the item cannot be picked up from any equipped slot of the creature bit 4 [16]: the item cannot be picked up from any inventory slot of the creature bit 5 [32]: the item cannot be dropped into any equipped slot of the creature bit 6 [64]: the item cannot be dropped into any inventory slot of the creature For example, USER STRREF FLAG STRREF2 STRREF4 STRREF8 STRREF16 STRREF32 STRREF64 MISC84 MINSC 10218 3 10218 -1 -1 -1 -1 -1 Item MISC84 cannot be picked up from any slot of "Minsc", and can only be equipped by "Minsc". Options: -0: disabled -1: enabled -----910 Non-Ammo Launcher Damage Fix [F] Fixes a bug with launcher weapons granting the damage and strength bonuses of non-launcher (4)-type abilities This corrects the issue with non-ammo-requiring launcher weapons (using ranged (2) ability) granting extra damage when ammo is equipped If this is enabled, damage bonuses of launcher abilities are only given for the first launcher (4)-type ability of the launcher weapon Options: -0: disabled -1: enabled -----800 Use Animation Percentages for Throwing Weapons [M, T] Enables the use of item ability slash %, backslash %, and jab % fields for ranged weapons equipped in a weapon slot that do not require a launcher Because this hack makes the creature use of the SEQ_ATTACK_[] animations instead of SEQ_SHOOT, attacks play the SEQ_ATTACK and SEQ_ATTACK_[] animation sounds instead of the SEQ_SHOOT animation sound These percentages will only affect creatures with animation IDs in the 0x5000-0x53FF group with animation prefix starting with C, and 0x6*** groups to maintain vanilla behaviour and Infinity Animations compatibility Options: -0: disabled -1: enabled /////////////////////////////////////// MUSIC -----360 Extended Songlist [C, M] (Different implementation to, and overrides tob_hacks) Removes the 100-row limit in SONGLIST.2DA Script action PlaySong() supports this change Extended song numbers are recognised in ARE files Options: -0: disabled -1: enabled /////////////////////////////////////// SOUND -----40 Animation Sound Fix [C, F] (Identical to tob_hacks) Fixes a bug that prevented sounds in the middle of animation soundset 2DA files from playing Options: -0: disabled -1: enabled -----230 Dialogue Greeting Subtitles [T] Displays the greeting string reference in the dialogue bar when initiating dialogue, similar to Baldur's Gate I behaviour Options: -0: disabled -1: enabled -----310 Enable Animation Attack Sounds [M, T] Enables the SLASH, BACKSLASH, and JAB sounds in animation soundset 2DA files Options: -0: disabled -1: enabled -----340 Existence Sound Fix [F] Fixes a bug where PICKED_POCKET sounds were played when EXISTANCE sounds were called for This was corrected to EXISTANCE5 Options: -0: disabled -1: enabled -----370 Externalise Animation Walking Sounds [M, X] Externalises all animation walking sounds to ANIWKSND.2DA ANIWKSND.2DA Description [ROWNAME]: animation ID ANIMATION: the name of the animation for your reference (from ANIMATE.IDS) WALK_SOUND: 6-character string specifying the root name of the walking sound. Longer strings are read truncated. Shorter strings cause havoc! A value of '*' is equivalent to no walking sound. WALK_NUM: integer specifying the number of walking sounds available for the root name. As per engine behaviour, a sound file will be loaded with name , where is mapped 0 -> a, 1 -> b, 2 -> c, ..., (WALK_NUM - 1) -> nul For example, WALK_SOUND WALK_NUM 0x1234 WAL_20 4 Walking sound for animation ID 0x1234 loads one of the following sounds: WAL_20a [0] WAL_20b [1] WAL_20c [2] WAL_20 [3] If WALK_SOUND is set to 'TERRAIN' and WALK_NUM is set to '*', ANITNSND.2DA is used to determine the walking sound. ANITNSND.2DA Description [ROWNAME]: terrain code, based on search map pixel WALK_SOUND: as ANIWKSND.2DA above WALK_NUM: as per ANIWKSND.2DA above Options: -0: disabled -1: enabled -----680 Soundset Subtitles [M, X] Enables subtitles for custom soundsets This works by appending CSOUND.2DA This is vanilla-compatible: if no column is present in CSOUND.2DA, no subtitles are used Before disabling this hack from your game, please switch the characters' soundsets back to Default Modding Note To use this hack, use APPEND_COL on CSOUND.2DA. The column header should contain the prefix of the soundset (e.g. FEMALE1). The values for each sound should point to the string reference to display for the sound with suffix designated by the existing LETTER column. Please note the LETTER values in rows labelled with the numbers 30, 31, 39, 63, and 64 are incorrect in vanilla Throne of Bhaal and should be corrected as shown below: COPY_EXISTING "csound.2da" "override/csound.2da" COUNT_2DA_COLS nColumns PATCH_IF nColumns == 2 THEN BEGIN SET_2DA_ENTRY 31 1 2 "x" SET_2DA_ENTRY 32 1 2 "y" SET_2DA_ENTRY 40 1 2 "*" SET_2DA_ENTRY 64 1 2 "_" SET_2DA_ENTRY 65 1 2 "*" END ELSE BEGIN SET_2DA_ENTRY 32 1 2 "x" SET_2DA_ENTRY 33 1 2 "y" SET_2DA_ENTRY 41 1 2 "*" SET_2DA_ENTRY 65 1 2 "_" SET_2DA_ENTRY 66 1 2 "*" END BUT_ONLY Options: -0: disabled -1: enabled /////////////////////////////////////// SPELLS -----180 Casting Fixes [F] Fixes a number of issues with casting sounds and graphics: 1. Modifies the way that the gender of casting sound selection is handled Normally, female gender uses female sound, other and niether gender uses unvoiced sound, and all other genders uses male sound This caused problems with spells like Project Image where illusory female creatures used male casting sounds This hack modifies so that female gender uses female sound, other and niether gender uses unvoiced sound, male gender uses male sound, and all other genders check the Sex field (0x237) in the CRE file format. If the Sex field is male, male sound is used. If female, female sound is used. For any other Sex field, an unvoiced sound is used 2. Takes into account the MENTALSPEED stat when determining whether to play a casting sound at all, whether to play a gendered or unvoiced casting sound, and whether to play the casting animation Options: -0: disabled -1: enabled -----1010 Configurable Spells Can Be Unvoiced [M] Adds new bit 25 to spell flags 'Can Be Cast When Silenced' When a spell is being cast while silenced using this flag, the silenced casting sound "CHA_S*" is used This does not change the behaviour of Vocalize (SPWI219), Set Snare (SPCL412), Set Special Snare (SPCL414), and Pocket Plane (SPIN649), which are castable when silenced without the hack Options: -0: disabled -1: enabled -----880 Configurable Spells Can Target Invisible [M] Adds new bit 24 to spell flags 'Can Target Invisible' This includes all creatures with invisibility and/or sanctuary Modding Note If this hack is enabled and a player attempts to use an item ability on an invisible/sanctuary creature with bit 26 set, string reference 46529 will display. It reads 'Spell Cancelled: Can not target spells on invisible or sanctuaried creatures.' This is not consistent with this hack. Mods using this hack should change the string reference to read 'Action Cancelled: Can not target action on invisible or sanctuaried creatures.' This substitutes the words 'Spell[s]' with 'Action' and allows compatibility with the 'Configurable Items Cannot Target Invisible' hack. Options: -0: disabled -1: enabled -----1600 Externalise Bard Song Effects [M, X] Externalises the standard bard song effects list to a spell file bardsong.spl, allowing it to be modded Options: -0: disabled -1: enabled /////////////////////////////////////// STORE -----1470 Item Recharge Mod [F, M] Modifies the following in relation to usages for non-stackable items with charges: 1. Items in a store with usages of 0 are no longer loaded with usages of 1 2. Putting items in bags no longer recharges the items (unless bit 14 of the store flags is set, see below) 3. Adds bit 14 (toggle recharge) to store flags. For bags, setting this bit will allow items to be recharged when placed in the bag. For stores, setting this bit will prevent items from recharging when sold to the store. 4. The buy and sell prices of items that recharge now take into account the fact that they recharge (hence, depleted rechargable items no longer buy/sell with a price of 1) Options: -0: disabled -1: enabled /////////////////////////////////////// TRIGGER -----320 Enable PickpocketFailed Trigger [C, M] (Different implementation to, and overrides tob_hacks) When pickpocketing fails, a PickPocketFailed() trigger is sent in addition to AttackedBy() Compare this behaviour with PickpocketFailed Trigger Only, where only PickPocketFailed() is sent Options: -0: disabled -1: enabled -----1000 Expanded Triggers [M] Enables the use of new triggers Expands trigger constructions to make use of the following parameter combinations: (S,I,I) (S,I,I,I) (S,O,I,I) (S,O,I,I,I) (S,S,O) New Trigger Descriptions 0x4100 NextTriggerObject(O:Object*) Defines the object that the next trigger will be evaluated in reference to This trigger itself does not evaluate and does not count as a trigger in an OR() block This trigger does not count as a trigger modified by Eval*() If the object cannot be found, the next trigger will evaluate to false 0x4101 MovementRate(O:Object*,I:Value*) 0x4102 MovementRateGT(O:Object*,I:Value*) 0x4103 MovementRateLT(O:Object*,I:Value*) Compares the animation movement rate of the target creature specified by Object to Value. This is not affected by slow or haste, but is affected if the Object is entangled, webbed, etc. 0x4104 NumMirrorImages(O:Object*,I:Value*) 0x4105 NumMirrorImagesGT(O:Object*,I:Value*) 0x4106 NumMirrorImagesLT(O:Object*,I:Value*) Compares the number of mirror images present on the target creature specified by Object to Value. 0x4107 BouncingSpellLevel(O:Object*,I:Level*) Returns true if the target creature specified by Object is bouncing spells of power Level. This returns true for both Bounce Spell Level (199) and Decrementing Bounce Spells (200) effects. 0x4108 NumBouncingSpellLevel(O:Object*,I:Level*,I:Amount*) 0x4109 NumBouncingSpellLevelGT(O:Object*,I:Level*,I:Amount*) 0x410A NumBouncingSpellLevelLT(O:Object*,I:Level*,I:Amount*) Compares the number of spell bounces remaining on the target creature specified by Object at the power Level to Amount. If Object has the Bounce Spell Level (199) opcode, then the number of spell bounces is unsigned 0xFFFFFFFF. 0x410B ImmuneToSpellLevel(O:Object*,I:Level*) Returns true if the target creature specified by Object is protected from spells of power Level. This returns true for both Protection from Spell Levels (102) and Decrementing Spell Immunity (201) effects. 0x410C NumImmuneToSpellLevel(O:Object*,I:Level*,I:Amount*) 0x410D NumImmuneToSpellLevelGT(O:Object*,I:Level*,I:Amount*) 0x410E NumImmuneToSpellLevelLT(O:Object*,I:Level*,I:Amount*) Compares the number of spell protections remaining on the target creature specified by Object at the power Level to Amount. If Object has the Protection from Spell Levels (102) opcode, then the number of spell protections is unsigned 0xFFFFFFFF. 0x410F TimeStopCounter(I:Number*) 0x4110 TimeStopCounterGT(I:Number*) 0x4111 TimeStopCounterLT(I:Number*) Compares the number of ticks left of time stop to Number. 0x4112 TimeStopObject(O:Object*) Returns true if the the target sprite specified by Object is the caster of time stop (and is exempt from the effect). 0x4113 NumTrappingSpellLevel(O:Object*,I:Level*,I:Amount*) 0x4114 NumTrappingSpellLevelGT(O:Object*,I:Level*,I:Amount*) 0x4115 NumTrappingSpellLevelLT(O:Object*,I:Level*,I:Amount*) Compares the number of spell traps remaining on the target creature specified by Object at the power Level to Amount. 0x4116 OriginalClass(O:Object*,I:Class*Class) Returns true if the target creature specified by Object is dual-classed and the original class matches Class. 0x4117 HPLost(O:Object*,I:Hit Points*) 0x4118 HPLostGT(O:Object*,I:Hit Points*) 0x4119 HPLostLT(O:Object*,I:Hit Points*) Compares the absolute number of hit points short of maximum hit points on the target creature specified by Object to Amount. 0x411A Assign(S:Statement*,I:Type*ArgType,I:Local*) Assigns a value determined by Statement of the type Type from ARGTYPE.IDS (INT integer, or STR string) to a local trigger block variable. The general form of Statement is "prefix[params]". This trigger does not evaluate and does not count as a trigger in an OR() block. -"prefix" can be: * 'c' - assigns a constant value; params is a number, e.g. c[1], or string, e.g. c[FOO] * 'e' - assigns the value of an expression; params is an expression, e.g. e[6 + 7]; see 0x411B Eval() for the format of Expression * 'id' - assigns the index of a IDS file value; params is file.value, e.g. id[EA.CHARMED] * 's' - assigns the value of the stat specified of the current object; params is the stat name, e.g. s[LEVEL] * 'sp' - assigns a special value specified; params is the special name from ASGNSPEC.IDS, e.g. sp[SPRITE_POS_X] * 'tn' - assigns the value of a 2DA file value by coordinates; params is file.x.y, e.g. tn[IMPORT01.0.0] * 'ts' - assigns the value of a 2DA file value by column and row name; params is file.column.row, e.g. tn[IMPORT01.ITEMS.1] * 'v' - assigns the value of a variable; params is name.scope, e.g. [foo.GLOBAL] -"params" values containing # and @ are replaced by the integer and string values, respectively, stored in local trigger block variables of index "num". Avoid using integer variables in expressions of string type. Avoid using string variables in expressions of integer type. The range of "num" is 0 to 24. 0x411B Eval(S:Expression*,I:Type*ArgType,I:Loc*) Overwrites the (Loc)th argument of type Type from ARGTYPE.IDS (INT integer, or STR string) in the next trigger with the value returned by Expression. This trigger does not evaluate and does not count as a trigger in an OR() block. This trigger does not overwrite values of the Assign(), NextTriggerObject() and OR() triggers. The NextTriggerObject() trigger ignores this trigger. -Expression is a math expression that can use the following symbols: =+-*/%^() min(x, y), max(x, y), avg(x, y) ceil(x), floor(x), round(x) abs(x) reciprocal(x) sqrt(x), pow(x, y) log(x), log10(x) sin(x), cos(x), tan(x), sinh(x), cosh(x), tanh(x), asin(x), acos(x), atan(x), atan2(x) Custom: and(x, y), or(x, y), band(x, y), bor(x, y) -Any text in Expression of form # and @ is replaced by the integer and string values, respectively, stored in local trigger block variables of index "num". Avoid using integer variables in expressions of string type. Avoid using string variables in expressions of integer type. The range of "num" is 0 to 24. 0x411C E(I:Num1*,I:Num2*) 0x411D GT(I:Num1*,I:Num2*) 0x411E LT(I:Num1*,I:Num2*) Compares "Num1" to "Num2", where E is equals, GT is greater than, and LT is less than. To make use of these triggers, the 0x411B Eval() trigger should be used prior to this trigger. Options: -0: disabled -1: enabled -----750 Kit Trigger Fix [F, M] Fixes the Kit() trigger to check the entire kit DWORD instead of just the low WORD This allows checking for the BARBARIAN (0x40000000) and WILDMAGE (0x80000000) kits specifically Options: -0: disabled -1: enabled -----1090 Optimise Bag Search Code [F, O] Greatly reduces the amount of overhead with triggers that check bags for the presence of items (i.e. HasItem() and variants) Also fixes the PartyHasItemIdentified() trigger, which had identical behaviour to the PartyHasItem() trigger in single player Options: -0: disabled -1: enabled -----1490 PickpocketFailed Trigger Only [C, M, T] (Different implementation to, and overrides tob_hacks) When pickpocketing fails, a PickPocketFailed() trigger is sent instead of AttackedBy() Compare this behaviour with Enable PickpocketFailed Trigger, where both triggers are sent Options: -0: disabled -1: enabled /////////////////////////////////////// UI -----10 Allow 1280 Total Kits [M] Multiples the maximum total kits allowed (256) to be installed by 5 For use with Scrollable Kit Selection Options: -0: disabled -1: enabled -----120 Contingency Detects Select Spell [F, M] Allows the contingency panel to support spells containing the Select Spell opcode Instead of showing the parent spell, the child spells contained in the 2DA file specified by the 'Resource' field of the Select Spell opcode that would be used if the spell is cast at the creature's level are shown Child spells are displayed separately, and are thus not stacked upon, normal spells or child spells from a different parent spell (for example, A.SPL with a Select Spell opcode of A.2DA containing SPWI112 would display separately from SPWI112.SPL and separately from B.SPL with a Select Spell opcode of B.2DA containing SPWI112) Select Spell opcodes embedded within Use EFF File opcodes are supported This also fixes a bug with scrolling of the spell choices when there are greater than 11 choices in a level Options: -0: disabled -1: enabled -----220 Custom Dialogue Bar Buffer Size [M] Allows you to customise the number of lines the dialogue/log bar displays before text is lost from the top 256 is the default value and is also the recommended minimum value Warning: values less than 32 should be considered unsafe, as clipped dialogue will crash the game Warning: very large values may slow the game down over time Options: -0: disabled -32-32767: sets the number of lines equivalent to this value -----330 Enlarge Tooltip Scroll [C, X] (Identical to tob_hacks) Makes the scroll for the tooltip wider Options: -0: disabled -1: enabled -----400 Externalise Mage Spell Hiding [C, M, X] (Different implementation to, and clashes with tob_hacks, Spell Revisions) Externalises the spells excluded from display in chargen and sorcerer level-up spell selection to hidespl.2da These spells are also excluded from the auto-picker Allows the NEXT/DONE button to be clicked in chargen even if not all spells are chosen Note that specialist mages (including wild mages) still require at least one school spell per level Warning: If all spells are excluded from a single level for a specialist mage, chargen cannot continue Options: -0: disabled -1: enabled -----410 Externalise Race Selection StrRef [C, M, X] (Different implementation to, and clashes with tob_hacks) Externalises hard-coded race selection StrRefs to RACETEXT.2DA Modding Note Basilisk (102), bear (103), mist (136), mimic (140), and giant (142) races have no race strings. If you plan to use these, use SET_2DA_ENTRY on the relevant rows of RACETEXT.2DA Options: -0: disabled -1: enabled -----630 Scrollable Chargen Mage Spell Selection [M, X] Adds a scroll bar to the mage spell selection panel during character generation Options: -0: disabled -1: enabled -----640 Scrollable Kit Selection [M, X] Adds a scroll bar to the kit selection panel during character generation Does not add scroll bars to mage specialties Does not allow more than 256 total kits (kits over 256 will crash game when clicking SKILLS button) The 256-kit limit can be overriden by using the Allow 1280 Total Kits hack Options: -0: disabled -1: enabled -----650 Scrollable Level Up Mage Spell Selection [M, X] Adds a scroll bar to the sorcerer spell selection panel during level-up Options: -0: disabled -1: enabled -----660 Scrollable Mage Spellbook [C, M, X] (Different implementation to, and clashes with tob_hacks) Adds up and down buttons to the mage book known spells panel Scrolls only when the number of spells in the level is > 20 Options: -0: disabled -1: enabled -----670 Scrollable Priest Spellbook [C, M, X] (Different implementation to, and clashes with tob_hacks) Adds up and down buttons to the priest book known spells panel Scrolls only when the number of spells in the level is > 20 Options: -0: disabled -1: enabled -----690 Universal Four Inventory Weapon Slots [M, T] Gives all playable classes four weapon slots in the inventory like fighters This only changes the inventory display and not the quick bar at the bottom of the screen Options: -0: disabled -1: enabled /////////////////////////////////////// VIDEO -----980 Enable More Paperdolls [C, M] (identical to, but also extends from Fishing For Trouble) Allows paperdolls to show in inventory and character customisation for animations 0x12XX, 0x2XXX, 0x3XXX, and non-vanilla 0x7XXX (except 0x73XX, which is already shown in vanilla) Note that paperdolls for the 0x7XXX group of animation must have to be named 0INV.BAM Options: -0: disabled -1: enabled -----440 IWD Animation Attack 3 Fix [F] Fixed IWD animations (0xE***) using the 3rd attack animation (A3) that would display the 2nd attack animation in northeast and east orientations when 'Sprite Mirror' is disabled in 'baldur.ini' Options: -0: disabled -1: enabled -----1270 Spell Turning Animation Fix [F] Fixes a bug introduced somewhere between builds 22941 and 23037 of Shadows of Amn where the specific spell bouncing animation (SPSTURNI.VVC) was not being played correctly Options: -0: disabled -1: enabled -----720 VVC Alpha Rendering Crash Fix [F] Enables the use of the alpha mask animation RLE-encoded BAM of VVC files by removing an erroneously placed assertion error This alpha mask animation is used only when 3d acceleration is enabled Options: -0: disabled -1: enabled -----1190 VVC Shadow Animation Fix [F] Fixes a bug in VVC files where the use of the 'Translucent shadow' display flag would use the normal animation Resref (0x8) for the shadow animation rather than the 'Shadow Animation ResRef' field (0x10) Options: -0: disabled -1: enabled /////////////////////////////////////// // TobEx AfterLife ----- Disarm Trap Distance Fix [F] Add safe distance around trap to disarm, fixes bug when original engine move char to centre of trap and if trap has large polygon it will automaticaly triggered Options: -0: disabled -1: enabled ----- Character Behind Polygon Fix [F] Make character behind big polygon (door/passes/...) selectable for mouse actions. There is other types of objects like containers on ground, they are always unavailable if overlapped by polygon from LIST_FRONT list because these objects belong to LIST_MIDDLE or LIST_BACK lists Options: -0: disabled -1: enabled ----- Continuous Battle Music Fix [F] Battle Music plays without reseting when GUI/Screen switched from main Game screen Options: -0: disabled -1: enabled ----- Set BG1 Animation during Character Generation [T] Set "BG1 Type" animation to main character, require Infinity Animation installed. GNOME and HALFORC animation missed in BG1 set, animation of GNOME become DWARF, HALFORC become HUMAN. Options: -0: disabled -1: enabled ----- Flickering Cursor Fix [F] In fullscreen mode for unknow reason engine renders cursor two times - first on backbuffer, then on primary surface. Writing to primary surface is bad idea because this surface is what graphic chip shows currently on monitor. Component removes writing to primary surface and keep only one way to render cursor - to backbuffer Options: -0: disabled -1: enabled ----- Cpu Idle [M] 1) Graphic Render uses infinite CPU cycle to synchronize with AI part of game(AI synchronized with constant timer). Tweak changes synchronization type to "events", events uses Windows API and don't load CPU 2) Timing in Movie player changed from CPU Cycles to sleep states 3) When switched from BG2 to other Application/Window, put engine to sleep state Options: -0: disabled -1: enabled ----- Effect Opcodes:Over Target Visual Effect [T] Some spells/weapons/items use "Over target (unattached) Visual Effect", this type of effect has adavantage(bug ?) - it ignores timing, always play animation only one time. And has visual disadvantage - no tracking to target/owner, animation plays always at same point on area, even target/owner moved far from this point. Tweak changes "Over target (unattached) Visual Effect" to be like "attached" version, e.g. move animation together with target/owner, also stop animation if owner is died/disappeared Options: -0: disabled -1: enabled ----- Skip OpenGL Fullscreen Display Modes with Fixed Interpolation [T] Since Windows XP, vendor's video driver can report same display mode tree times: 1) Default mode, 2) Centered in larger screen space 3) Stretched to fill larger screen space. In Intel/NVidia control panel default mode can be overrided to few selectable option - scale by display/scale by driver/etc. BG2 engine don't expect same mode few times and always fetch first in line. Depending on video driver, it can be any of three modes, control panel in this case ignores user's preferences and rely directly on application request (Intel control panel has "Override Application Settings" to ignore application request, but this option not available for all possible scaling methods and doesn't work properly with OpenGL apps). Component skips centered/stretched modes and prefers default mode without any interpolation Options: -0: disabled -1: skip all fixed interpolation modes -2: force display's default setting ----- OpenGL VSync On [T] Enable OpenGL VSync by game itself, useful with Intel VGA latest drivers when in Graphics Control Panel VSYNC and TripleBuffering can be enabled always together and no way to enable VSync only (all Infinity Engines don't compatible with triple buffering) Options: -0: Keep default VSync -1: Force VSync On ----- Protection From Spell for Contingency Fix [F] Fixes Protection From Spell opcode to work with Contingency/Sequencer. Normaly engine parse all spells in Contingency list and place it to two queue, apply all available effects from first queue and only after this process second queue. Component place Protection From Spell and other opcodes to first(Message) queue to process one spell as one job Options: -0: disabled -1: enabled ----- Run In Background [T] Run game even in inactive window on screen, works only in window mode, at fullscreen game always pause if switched to other window Options: -0: disabled -1: enabled ----- Stop Animation/Sound of Interrupted Casting [F] Adds handling "non-damage" events to stop animation/sound when NPC/Party interrupted casting or died Options: -0: disabled -1: enabled ----- Mixed Soundset for BGT [M] For BGT changes default BG2 selection sounds to BG1/Mix/Max soundset for listed creatures. Requires external BGSNDSET.2DA: 2DA V1.00 * Type AASIM BG1 ABELA BG2 IMOEN10 Mix IMOEN15 Max ... ... first column - creature filename second column - BG1 - CRE file has BG1 soundset: BG1_SELECT_ACTION1-3 (0x124-0x12C) + BG1_SELECT_RARE1-4 (0x130-0x13c) BG2 - CRE file has BG2 soundset: BG2_SELECT_ACTION1-7 (0x124-0x13C) + BG2_SELECT_RARE1-2 (0x1a0-0x1a4) Mix - CRE file has Mixed soundset: BG2_SELECT_ACTION1-7 (0x124-0x13C) + BG2_SELECT_RARE1-2 (0x1a0-0x1a4) + BG2EE_SELECT_RARE1-4 (0x1d0-0x1dc)(slots #75-78) Max - same as Mix + all unused slots in 0x1e0-0x230 range used as additional sounds 1 MORALE2 1e0 (slot #79) 2 HAPPY2 1e4 (slot #80) 3 UNHAPPY_ANNOYED2 1e8 (slot #81) 4 UNHAPPY_SERIOUS2 1ec (slot #82) 5 UNHAPPY_BREAKING_POINT2 1f0 (slot #83) 6 LEADER2 1f4 (slot #84) 7 TIRED2 1f8 (slot #85) 8 BORED2 1fc (slot #86) 18 DAMAGE2 200 (slot #87) 19 DYING2 204 (slot #88) 20 HURT2 208 (slot #89) 21 AREA_FOREST2 20c (slot #90) 22 AREA_CITY2 210 (slot #91) 23 AREA_DUNGEON2 214 (slot #92) 24 AREA_DAY2 218 (slot #93) 25 AREA_NIGHT2 21c (slot #94) 27 SELECT_COMMON7 220 (slot #95) 28 SELECT_COMMON8 224 (slot #96) 29 SELECT_COMMON9 228 (slot #97) 32 SELECT_ACTION8 22C (slot #98) 33 SELECT_ACTION9 230 (slot #99) For example char with Max type will play MORALE sound from original offset 0xA8 and from additional 0x1E0 by random order. Max type plays rare sounds after 13 clicks. BG2EE_SELECT_RARE1-4 works as BG1_SELECT_RARE1-4, plays rare sounds after 9 clicks. Due engine bug when it lost first char of creature filename in savegame files, this component requires starting new game. Options: -0: disabled -1: enabled ----- External Crashdump Saving Utility [D] Enables external Library (ExceptionHandler © 1998 Bruce Dawson) to save MS WinDbg compatible crashdump file to disk Options: -0: disabled -1: enabled ----- Externalise Animation Sound Reference Override [M] Each animation sound 2da contains soundset information associated with each animation with the same 4-letter animation code (see reference ANIMSND.2DA). Unfortunately engine doesn't use ANIMSND.2DA, instead all 4-letter soundset filenames hardcoded to game code. Option externalises animation_id->sound_2da_filename mapping to ANISNDEX.2DA for override hardcoded values: 2DA V1.0 **** File Description 0x7101 MBAS2 BASILISK_GREATER 0x7200 MBER4 BEAR_BLACK 0x7202 MBER3 BEAR_CAVE 0x7203 MBER2 BEAR_POLAR 0x7401 MDOG2 DOG_WAR 0x7501 MDOP2 DOPPLEGANGER_GREATER 0x7702 MGHL2 GHOUL_GHAST 0x7B01 MWLF5 WOLF_WORG 0x7B02 MWLF6 WOLF_DIRE 0xA000 MWYV2 SMALL_WYVERN ...... ..... .................. Options: -0: disabled -1: enabled ----- Externalise Animation Config Override [M] Externalise some usefull animation parameters to EXTANIM.2DA: 2DA V1.0 * move_scale personal_space color_blood color_chunks sound_freq sound_death brightest light_source detected_by_infravision resref resref_paperdoll 0x7B00 9 3 48 1 6 FAL_03B 1 0 1 BG1T BG1P first column - custom animation id move_scale - walk speed personal_space - foot/selection size color_blood - color of creature's blood color_chunks - enable chunk death animation sound_freq - walk sound refresh time, in ticks (tick = 1/15 sec) sound_death - sound file played when dying/fall brightest - enable special blending mode when sprite is rendered onto the screen light_source - when is set, environmental lighting such as day/night, weather or shadows do not affect the creature animation detected_by_infravision - this attribute indicates whether a red tint is applied to the creature when it is spotted by infravision resref - set custom animation fileset and Sound_2DA filename, 4 chars resref_paperdoll - set custom paperdoll animation fileset, 4 chars, if set to *, uses resref fileset * - skip changes to this parameter If Sound_2DA need to have different filename, use ANISNDEX.2DA to set Main animation filename calculation: BG1T + 2 + a/c/g/w/...bam BG1T - resref 2 - armor code, 1 - no armor, 2 - leather, ... a/c/g/w/... - hardcoded animation suffixes Paperdoll body animation filename calculation: BG1P + 2 + INV.bam BG1P - resref_paperdoll 2 - armor code, 1 - no armor, 2 - leather, ... INV - suffix brightest used in: 0xxx(AnimationTypeEffect) 13xx(AnimationTypeMonsterMultiNew) 73xx(AnimationTypeMonster - 73xx, 77xx, 7Fxx) detected_by_infravision used in: 13xx 5xxx/6xxx (BG1/BG2 Playable Human) 7xxx (BG1 Monsters) 73xx(AnimationTypeMonster - 73xx, 77xx, 7Fxx) Exxx light_source used in: 13xx 7F3B MSOL 7F3C MASL 7310 MFIE 7311 MFIS 7312 MFIE 7313 MFIS 7314 MFIE many effects: 0Bxx 0C0xx EXTANIM.2DA ignored for Static/Effect/Flying animation: 0x0XXX 0x4XXX 0xBXXX 0xDXXX Externalise 0x6xxx (BG2 Playable Humans) animation parameters to EXTANIM60.2DA: 2DA V1.0 * armor_max_code equip_helmet split_bams height_code height_code_helmet height_code_shield anim_class 0x6600 2 0 1 MTW MTH MTS W first column - custom animation id, requires same id entry in EXTANIM.2DA armor_max_code - maximum armor code available for the creature animation equip_helmet - whether helmet animation overlays can be drawn split_bams - which animation scheme to use, 0: animations are packed in G1 and CA files, 1: animations are spread over various subfiles height_code - set custom main BG2 animation fileset, 3 chars height_code_helmet - set custom helmet BG2 animation fileset, 3 chars height_code_shield - set custom shield BG2 animation fileset, 3 chars anim_class - set to W for Mages to enable Robe paperdoll/sound * - skip changes to this parameter Paperdoll main hand weapon animation filename calculation: MTW + P + SS/D2/.. + IN.bam MTW - height_code P - hardcoded paperdoll suffix SS/D2... - weapon/shield animation code, 2 chars IN - suffix Paperdoll off hand weapon filename calculation: MTS + P + SS + O + I.bam MTS - height_code_shield P - hardcoded paperdoll suffix SS - weapon code, 2 chars O - hardcoded off hand weapon suffix I - suffix Paperdoll shield filename calculation: MTS + P + D1 + IN.bam MTS - height_code_shield P - hardcoded paperdoll suffix D1 - shield code, 2 chars IN - suffix Paperdoll helmet animation filename calculation: MTH + P + H2 + IN.bam MTH - height_code_helmet P - hardcoded paperdoll suffix H2 - helmet animation code, 2 chars IN - suffix height_code - if equal WQS/WQL/WQM/WQN, uses vanilla shared animation files: 1) set object prefix (usefull for InfinityAnimation BG2 random slots) 2) skip new paperdoll prefix calculation (+"P"+), uses vanilla WPS/WPL/WPM/WPN fileset Example: HeightCode = WQL HeightCodeHelmet = WQL HeightCodeShield = Objects bams = WQL + H0/SS/ODD/D2 + A*/G2 Weapon main hand Paperdoll = WPL SS INV Weapon off hand Paperdoll = WPL SS O IN Shield Paperdoll = WPL D2 INV Helmet Paperdoll = WPL H0 INV Externalise 0x64xx (InfinityAnimation BG1 Playable Humans) animation parameters to EXTANIM60.2DA: 2DA V1.0 * armor_max_code equip_helmet height_code height_code_helmet shadow anim_class 0x6600 4 0 BGT BGH CSHD W first column - custom animation id, requires same id entry in EXTANIM.2DA armor_max_code - maximum armor code available for the creature animation equip_helmet - whether helmet animation overlays can be drawn height_code - set custom main IA BG1 animation fileset, 3 chars height_code_helmet - set custom helmet IA BG1 animation fileset, 3 chars shadow - set custom shadow IA BG1 animation fileset, 4 chars anim_class - set to W for Mages to enable Robe paperdoll/sound * - skip changes to this parameter Paperdoll main hand weapon/shield animation filename calculation: BGT + P + SS/D2/.. + IN.bam BGT - height_code P - hardcoded paperdoll suffix SS/D2... - weapon/shield animation code, 2 chars IN - suffix Paperdoll off hand weapon filename calculation: BGT + P + SS + O + I.bam BGT - height_code P - hardcoded paperdoll suffix SS - weapon, 2 chars O - hardcoded off hand weapon suffix I - suffix Paperdoll helmet animation filename calculation: BGH + P + H2 + IN.bam BGH - height_code_helmet P - hardcoded paperdoll suffix H2 - helmet animation code, 2 chars IN - suffix height_code - if equal WPS/WPL/WPM, uses vanilla shared animation files: 1) set object prefix (usefull for InfinityAnimation BG1 random slots) 2) skip new paperdoll prefix calculation (+"P"+) Example: HeightCode = WPL HeightCodeHelmet = WPT Objects bams = WPL + H0/SS/ODD/D2 + A*/G2 (vanilla BAMs) Weapon Paperdoll = WPL SS INV Shield Paperdoll = WPL D2 INV Helmet Paperdoll = WPT H0 INV Options: -0: disabled -1: enabled ----- Sound:Mute Generic Animation Attack Sound [T] If creature doesn't have personal attack sounds, on every melee attack engine plays ATTACK sound from animation sound 2DA file. TobEx's "Enable Animation Attack Sounds" option introduced playing additional specific attack animation sound together with ATTACK sound. This component disables first ATTACK sound and plays only specic attack animation sound. Options: -0: disabled -1: enabled ----- Sound:Disable Hardcoded BG1 Item Sounds [T] BG2 engine has one of BG1 legacy - some monster's weapons have hardcoded specific sounds. Same goal can be reached using new animation sound 2da files. Option disables hardcoded item mapping if this mapping will be rely on 2da files. For example hardcoded melee ANGHEG1.itm->ANKHG06.wav and range ANGHEG2.itm->ANKHG05.wav can be implemented in 2da format: ATTACK or ATTACK_SLASH/ATTACK_BACKSLASH/ATTACK_JAB ANKHG06 SHOOT ANKHG05 Options: -0: disabled -1: enabled ----- Self-Patched Effect Removing Fix [F] Color setting effects (effect codes 7,8,9,51,52) may self-modify if applied on item in off hand. These effects can not be removed due 100% match requirement with original item's ability. Component enables removing effects with these codes. Options: -0: disabled -1: enabled ----- Sequence Sound Override Fix [F] Most animation types have hardcoded sequence overrides for animation sound 2da files. For example when Ankheg (animation_id 3xxx) does range attack, engine overrides SHOOT sound to READY. Component removes most overrides and makes using sound 2da files more precisely Options: -0: disabled -1: enabled ----- Ankheg Range Weapon Animation Fix [F] Vanilla engine assigns range animation for melee JAB attack and assigns empty animation for SHOOT/Range attack. Component set range animation for SHOOT attack and SLASH/BACKSLASH animation for JAB attack. Options: -0: disabled -1: enabled ----- Sound:Creature Embedded Sound overrides 2DA Entry [T] Tweak removes playing of attack animation sounds from 2da if creature has personal sounds. Mapping: DAMAGE mute 2DA's DAMAGE DYING mute 2DA's DIE ATTACK1 mute 2DA's ATTACK and ATTACK_SLASH ATTACK2 mute 2DA's ATTACK and ATTACK_BACKSLASH ATTACK3 mute 2DA's ATTACK and ATTACK_JAB ATTACK4 mute 2DA's SHOOT Options: -0: disabled -1: enabled ----- Sound:Restore Creature Attack Sounds #1 [T] Engine has bug with Creature Attack[2-4] (0xe0-0xe8 offsets) sounds, it always play Attack1 sound only. Restore sounds with mapping: ATTACK1 – on slash animation ATTACK2 – on backslash animation ATTACK3 – on jab animation ATTACK4 – on shoot/range animation ATTACK4 wasn't used in original engine and has unknow original purpose, Skellytz introduced new mapping - set creature personal range weapon sound. Options: -0: disabled -1: enabled ----- Sound:Restore Creature Attack Sounds #2 [T] If creature equipped with one of weapon with specific swing sound, game mutes personal(embedded) ATTACK1-4 sounds, but still plays attack sounds from animation sound 2da at same time. Component restores playing ATTACK1-4 sounds together with weapon swing sound (even for Darts and Touch weapons with special "mute all swing sounds" mode) Options: -0: disabled -1: enabled ----- Sound:Enable Robe Armor Sound [T] Restores disabled ARM_01*.wav for Mages with Robes. For using with InfinityAnimation random Mage AnimID, requires anim_class=W in EXTANIM60.2DA/EXTANIM64.2DA Options: -0: disabled -1: enabled ----- Reset Idle Timer After Weapon Equipped [T] Enable long-timed SEQ_READY animation sequence if char equipped/re-equiped weapon or shield. Removes bug when SEQ_READY showed only for 1 or 2 animation frames and changed instantly to SEQ_HEAD_TURN Options: -0: disabled -1: enabled ----- Weapon Speed Fix [F] Ignores ammo speed (usualy = 0, max speed) for ranged weapon, instead uses launcher speed. Restores WSPECIAL.2DA's SPEED column speed bonus. Options: -0: disabled -1: enabled ----- Path Search Party Bumpable When Moving [T] Alternates Path Search algorithm to ignore Party/Ally current position to eliminate famous bug when char can not directly move to destionation point if other party member currently is blocking passage. Original algorithm may change current direction to other side of map, then recalculate after timeout and back to "right" way Options: -0: disabled -1: enabled ----- Enable Off Hand Weapon BG1 Animation [T] Enables paperdoll off hand weapon animation for InfinityAnimation BG1 Chars, filename calculation: WP[S/M/L] + WeaponCode + "O" + "IN.BAM". Animation forced to use main hand weapon animation, there is no off hand weapon animation files in BG1 Options: -0: disabled -1: enabled ----- Disable Hidden TobEx Patches [D] Disables small patches when need to keep only few enabled options: - Set Wild Mage school to Generalist - Remove +2/-2 bonus "Unschooled weapon/item Effects versus Chars with any Kit - Allow equip Robe for Mages with BG1 type animation - Extended combat text mistypos - Clear "unstealable" bit when putting item to Bag to allow stacking - Remove hardcoded check for mage animation X2XX for Infinity Animation BG1 type Mage animation - Fixes Armor sound for Infinity Animation BG1/BG2 type Mage animation - Remove WAL_77*.wav Ready Sound for Infinity Animation 0x10XX/0x50XX animation monsters - Enable dual-classing for Infinity Animation BG1 type animation - Green highlight stats(with +bonus) on inventory screen - Undefined creating/assign CString from not null-ended ResRef::GetResRef() - Remove crash when "min level" field setted in .ITM - Enable any resolution in window mode - Mouse Wheel on some ScrollBars - Assign SPACE key as ENTER in dialogs - Bugged Mislead clone for Creatures with >327 HitPoints - Destructed first char of .CRE filename in save games - Trigger AreaCheckObject() crash - Remove doubling sound in dialogs - Remove spell hotkeys exploit - Gender Change opcode fix - Remove multi-target items/spell swap exploit - Disable 2DA sounds when playing SELECT_ACTION from .CRE - Add missed Bow/Crossbow/Sling Elf/Halfling race bonus when weapon in "ranged" mode (without ammo) - CAnimation1200::CAnimation1200() forget to set wAnimId - CreateInventoryItem(opcode=122) forgot to set "undroppable" item flag for Simulacrum clone - Disable resetting sequence to SEQ_READY in ClearActions() if: 1) Char going to walk after idle 2) Char already in idle state (has SEQ_HEAD_TURN sequence) - 2TB+ free space error window Disables game code injects: - CEffect::CreateEffect() - CEffect::ApplyTiming() - CEffect::CheckSave() - CDerivedStats::OpAdd() - CEffectDamage::ApplyEffect() - CItem::GetAbilityEffect() - ResSplContainer::GetAbilityEffect() - CCreatureObject::ActionPickPockets() - CreateUIControl() - CRuleTables::GetMageSpellRef() - CCreatureObject::SetCurrentAction() - CCreatureObject::Construct() Options: -0: disabled -1: enabled ----- Saving Throw Improved Invisible Bonus [C] Enable +4 Saving Throw Bonus at engine level, doesn't apply bonus against creatures with ability to see invisible. Component not compatible with BG2 Fixpack! (BG2 Fixpack has own, but worse fix) ----- Small Purple Elemental Palette Fix [F] Override palette .BMP references MFIEG1B->MFISG1B, MFIEG2B->MFISG2B for 0x7313 animation back to overview ----- 44Khz Sound Mixer Frequency [T] Change default 22kHz Mixer frequency to 44Khz. Affects only Primary DirectSound buffer, secondary buffers still use .WAV frequency, usually 22Khz. Also fixes little frequency shift, engine plays 22050Hz recorded sounds at 22000Hz. -------------------------------------------------------------------------------- Default AfterLife options state: Character Behind Polygon Fix=1 Disarm Trap Distance Fix=1 Continuous Battle Music Fix=1 Set BG1 Animation during Character Generation=0 Flickering Cursor Fix=1 Cpu Idle=1 Over Target Visual Effect Fixes=1 Skip OpenGL Fullscreen Display Modes with Fixed Interpolation=0 OpenGL VSync On=0 Protection From Spell for Contingency Fix=1 Run In Background=0 Disable Hidden TobEx Patches=0 External Crashdump Saving Utility=1 Stop Animation/Sound of Interrupted Casting=1 Mixed Soundset for BGT=1 Externalise Animation Sound Reference Override=1 Externalise Animation Config Override=1 Mute Generic Animation Attack Sound=0 Disable Hardcoded BG1 Item Sounds=0 Self-Patched Effect Removing Fix=1 Sequence Sound Override Fix=1 Ankheg Range Weapon Animation Fix=1 Creature Embedded Sound overrides 2DA Entry=1 Restore Creature Attack Sounds #1=1 Restore Creature Attack Sounds #2=1 Enable Off Hand Weapon BG1 Animation=0 Enable Robe Armor Sound=1 Reset Idle Timer After Weapon Equipped=1 Weapon Speed Fix=1 Path Search Party Bumpable When Moving=0 Saving Throw Improved Invisible Bonus=0 Small Purple Elemental Palette Fix=1 44Khz Mixer=1 /////////////////////////////////////// EOF